11. Workshops
a. Start of Semester
- Topics
- Pick
- Dr. Park in Fellows meeting
- Dates
- Assign
- Dr. Park in Fellows meeting
- Instructors
- Assign
- Dr. Park in Fellows meeting
b. Possible Workshops
- Dr. Park
- R Programming Basics (level 1)
- Data Wrangling with R (level 2)
- Tableau (level 1)
- Bhaven
- Get Equipped with LaTeX (level 1)
- Get Equipped with MATLAB (level 1)
- Vanessa
- Excel (level 1)
- SQL (level 1) (Find cloud based complier that imports files like csv
and sql)
- GIS (level 1) (ArcGIS Online for Mac and Windows)
- Sam Kim
- STATA (level 1)
- STATA (level 2) – develop with Sam Lee
- Others (need instructors)
c. Confirming Dates with Instructors
Subject: QCL Workshops - confirming dates
Good afternoon Bhaven,
Happy Tuesday! I hope you are doing well! As the new semester
approaches, I wanted to confirm if these dates work for you to
instruct:
Monday, January 24, 2022, at 5pm - 7pm for Get Equipped with LaTeX as
an online workshop
Monday, February 21, 2022, at 5pm - 7pm for Get Equipped with MATLAB
(TBA as a hybrid, in-person, or online workshop due to the Covid
policies)
We have only scheduled up to Spring Break, I will have to follow up
in the future for the rest of the semester’s dates. Do these dates and
time work for you to instruct the workshops?
Thank you,
Vanessa Arias Casillas
Graduate Fellow - Murty Sunak Quantitative and Computing Lab (QCL)
Claremont Mckenna College
vanessa.casillas@claremontmckenna.edu
Two weeks before day of workshop
- Contact Instructor
- Setup meeting
- Agenda of meeting
- Summary of localist
- Software
- Websites
- Licenses
Instructors Notes turned into Summaries
Good afternoon [instructor’s name],
Happy Tuesday! I am looking forward to your dryrun of [workshop]! I
am starting to create the registration page for the workshop and would
like to get a bit of information from you about the workshop.
First, do you have a summary page for your workshop? I have an
example of Sam Lee’s below:
Second, do you have any pre-workshop requirements that the attendees
need to do before the workshop? Like download programs or sign up for a
license.
Third, what time did you want to do your workshop at 3pm-5pm or
4pm-6pm?
Fourth, would you like this workshop to be a hybrid, online only or
in-person only?
Lastly, is there any information you would like me to let the attendees
know about before walking into the workshop? like website where to
download files or a note about the data.
Thank you for this information, it will help me in getting the
workshop’s registration ready.
Thank you,
Graduate Fellow - Murty Sunak Quantitative and Computing Lab (QCL)
[QCL Workshop] Title
About this Event
Title
Summary
Agenda:
Learning Objectives: (You will learn how to)
Prerequisite:
Location:
Participants:
Example Instructors Notes turned into
Summaries
[QCL Workshop] R Programming Basics (Level 1 – Coding)
About this Event
R Programming Basics (Level 1 - Coding)
Summary:
R is an open-source statistical programming language. R is widely used
in industry as well as in academia for statistical analysis and data
visualization. In this workshop, we introduce the basics of the R
language and its programming environment through simple hands-on
examples. This workshop is designed for beginners in R programming, so
no prior knowledge of R programming is needed. However, general
programming knowledge in any programming language will be help
understand the programming concepts. We will be using RStudio Cloud for
hands-on. Please create a free account at https://rstudio.cloud
before join the workshop.
Agenda:
• Basics of R and RStudio • R Programming Environment: Workspace,
Working Directory, Package • R objects (data structure and function) • R
packages for data import and export • R graphics for simple plotting
methods • Basic statistical analysis using R
Location:
Hybrid (In-person: QCL Classroom, Online: Zoom information will be
provided to the attendees after registration) Click here to find your
way to the QCL.
Participants:
CMC Students, Faculty, and Staff
___
Data Wrangling with R (Level 2 - Data)
Summary:
Data wrangling is the process of obtaining, cleaning, reshaping, and
transforming raw (and messy) data into a useable form of processed (and
tidy) data. It is known that a majority of data analysts and data
scientists spend as much as 80% of their time on data wrangling. So it’s
essential to get familiar with good data wrangling tools that help you
save time and avoid errors. In this hands-on workshop, you will learn
basic skills to import, export, clean, reshape, transform, and visualize
data using well-known data science package called tidyverse.
Learning Objectives: (You will learn how to)
Import and export data Clean, reshape and transform data Make messy data
into tidy data Visualize tidy data using ggplot2 (if time permits)
Prerequisites:
Basic knowledge of R and RStudio (e.g., R Programming for Beginners -
Level 1) RStudio Cloud account; if you don’t have one yet, please create
a new account from https://rstudio.cloud site. Tidyverse package; please
make sure that you have installed the tidyverse package in your R
environment. See https://www.tidyverse.org for more information.
Location:
Hybrid (In-person: QCL Classroom, Online: Zoom information will be
provided to the attendees after registration) Click here to find your
way to the QCL.
Participants:
CMC Students, Faculty, and Staff
___
GIS - Part 2 (Level 1 - Data) Workshop
About this Event
Summary:
This workshop will introduce you to the ever-expanding and fascinating
world of geographic information systems (GIS). In three 2-hour sessions
you will learn about what GIS is, how it is used in a multitude of
industries and fields, and how to get started using GIS software. We
will examine GIS concepts and software tools used to visualize
real-world features, discover patterns, and communicate information.
Primarily using ArcGIS Online (if you can hyperlink: https://doc.arcgis.com/en/arcgis-online/get-started/what-is-agol.htm)
you will work with GIS maps, explore data, and analyze maps and data as
you learn fundamental concepts that underlie GIS technology. Through a
series of presentations, in-class tutorials, and homework assignments
this workshop will give you a strong beginning foundation on how to make
maps and explore spatial data to identify patterns and insights in your
data you never knew possible. You will come away from this workshop with
the understanding you need to start working with GIS and utilize it in
your own work and explorations. You do not need any previous experience
– just your own curiosity! Students in this workshop (in fact, all
Claremont Colleges students) have free access to a wide variety Esri GIS
products. For more information, check out the Claremont Colleges Library
Geographic Information System (GIS) Services home page, https://library.claremont.edu/gis/
Learning Objectives: (You will learn how to)
Topics will include: • Introduction to the GIS Platform • Theoretical
basis of GIS and the Geographic Approach • What can you do with GIS? •
Understanding GIS data • An introduction to Coordinate systems and
Projections • Acquiring and selecting GIS Data • Utilizing and preparing
your own data for GIS • Creating maps – basic cartography, symbology •
The US Census and GIS • Introductory Spatial Analysis • Sharing results
– physical maps and the world online maps
Location:
The following event will be conducted in a hybrid format: • Virtual:
Zoom • In-Person: QCL Classroom
Participants:
7C Students, Faculty and Staff
___
One week before day of workshop
Moderator
- If you are instructing
- Ask for whoever moderator a week before or instruct and moderate
yourself.
Zoom
Step 1:
- Go to meetings

Step 2:
- Click on Schedule

Step 3:
- Go to QCL workshop

Step 4:
- Look for workshop you are working

Step 5:
- Fill in meeting information on Zoom then click save,
- Description (Optional) comes from Instructor’s meeting

Step 6:
- You will see this

Step 7:
- On meeting tab, it should there

Localist
Step 1:
- Start by copying an old event
- Make sure you are working on copy
- Fill in all information (Like below)
- Click “Include Above in Schedule”
- Delete the old Confirmed dates
- Description is made from Instructor’s meeting

Step 2:
- Fill out Location (Like below)
- Check if event is only in-person, only virtual or hybrid

Step 3:
- Change the Owner to yourself
- Check Vanity URL (qcl_workshop_stata_fa21_1117)

Step 4:
- Add a Ticket Types
- Virtual or In-Person (or both)
- Make sure Virtual is always on Top

Step 5:
- Add a Virtual ticket name is ZOOM and drag to the right ticket type
(pic wrong)
- Then go into additional ticket options

Step 6:
- Check to make sure settings are correct
- Make sure Ticket availability dates correctly dated or left blank if
you will manual turn off

Step 7:
- Add in-person ticket named QCL CLASSROOM and drag to the right
ticket type (pic wrong)
- Then go into additional ticket options

Step 8:
- Check to make sure setting are correct

Step 9:
- Check to make sure that Attendees Questions are correct
- “Please enter your student ID # (Must be 8 characters). For all
faculty/staff/non-Claremont Colleges person, please insert 00000000.”
(Required)
- “Please indicate gender (male or female)”
- “Which one of the Claremont Colleges are you from?” (Required)
- “If not from the Claremont Colleges, where are you from?”
- “Are you a Freshman, Sophomore, Junior, Senior, Graduate Student,
Faculty, Staff or Other?” (Required)
- “If Other, please specify:”

Step 10:
- Check to make sure you have the correct Event Capacity

Step 11:
- Publish or NOT
- Make sure if you are publishing that the checkmark is checked
- But if you want another Fellow to review then make sure publish is
not checked
- Then Click Save
- TEST! TEST! TEST!
- when you set up the registration pages, please test them by
registering for the workshops and see if everything works fine including
the email confirmation, Zoom links, etc.
- Send Dr. Park an email + post a message on Teams so that I can
announce them.

Two days before day of workshop
Close Registration for workshop
Step 1:
- For those that do not require extensive prior prep, let’s close them
5 pm a day before. And, 2 days prior for those that require requesting
licenses
- Go into event
- Go into tickets
- Click inactivate on any tickets that are active

Step 2:
- You should see the ticket status as inactivate

Day before day of workshop
Qualtrics
Step 1:
- Make sure to make a Sign and Exit one
- Make copy of old one
- Sign in for sign in
(Fall_2021_Signin_Survey_SQL_Lvl1_Vanessa_Casillas_1119)
- Exit for Exit
(Fall_2021_Exit_Survey_SQL_Lvl1_Vanessa_Casillas_1119)

Step 2:
- Change name to workshop name and instructor

Step 3:
- Change workshop sign-in for and Date/Time
- Sign-in

Step 4:
- Change workflow link
- In email to the weird code
- Make sure Dr. Park is getting an email sent to him


Step 5:
- Exit

Step 6:
- Change workflow link
- Make sure Dr. Park is getting an email sent to him

Step 7:
- Click Publish

Step 8:
- Copy link to use for Bit.ly later and hit publish
- If you forget to get here, you can still get it when you make QR
code

Step 9:
- Barcode for Word doc
- Anonymous link will give you the link of the survey again to put
into Bit.ly
- Download QR code for word doc use

Bit.ly
Step 1:
- Copy and paste the shorten link into word doc

Step 2:
- Once you create a registration form on localist, would you please
create bit.ly short cut and let me know? Do you know how to create a
bit.ly URL shortcut?
- created shortcuts with some naming convention she made for herself.
Flyer Word doc
- Change to fit workshop
- Title
- Date & Time
- Instructor
- QR Code from Qualtrics
- Shorten link from Bit.ly

Emails (to be written)
Reminder Email
Dear MATLAB (Level 1 – Coding+Computing) Attendees:
Thank you for registering for the MATLAB (Level 1 – Coding+Computing)
Workshop.
Getting Equipped with MATLAB (Level 1 – Coding+Computing)
Instructor: Bhaven Mistry (Assistant Director of the QCL)
Summary:
Want to learn to program, but don’t know where to start or what to
install? MATLAB is a numerical computing language and environment that
is surprisingly easy to use. Typically used by engineers and scientists,
you can think of it as a very powerful, customizable calculator. But,
interestingly, it’s this very characteristic that makes MATLAB an ideal
language for programming beginners, even if you’re not mathematically
inclined. In this workshop, we will step you through the basics of
programming using the MATLAB coding environment. We will start by
getting familiar with the software, learning the basics of variable
assignment and manipulation, writing our own functions, and exploring
some applications. If you’re completely new to programming, learning the
fundamentals with MATLAB first is a great way to springboard into other
languages. Alternatively, if you have some experience with programming,
but have always wanted to learn what MATLAB is used for, this could be a
good way to get your feet wet.
Pre-requisites:
Internet Use: Introductory level (search, log-in, navigation of
websites, etc.) Software: Attendees are asked to have MATLAB on their
computers for the workshop. MATLAB is available for CMC students and
faculty at https://www.cmc.edu/information-technology/academic-software
Location:
Online (Attendees will receive the Zoom meeting information after
registration)
Participants:
Open to all CMC Students, Faculty and Staff
I am attaching information for the workshop below:
QCL Workshop is inviting you to a scheduled Zoom meeting.
Topic: [QCL Workshop] Get Equipped with MATLAB
Time: Sep 29, 2021 03:00 PM Pacific Time (US and Canada)
Join Zoom Meeting
https://cmc-its.zoom.us/j/83773547610?pwd=Y2loa3VoWnQvWFQxUDg1V0xIbHBNdz09
Meeting ID: 837 7354 7610
Passcode: workshop!
Required Software/Account
https://www.cmc.edu/information-technology/academic-software
Let me know if you have any questions.
Best regards,
Vanessa Casillas
QCL Graduate Fellow
Attendees Emails
Go to Localist and click on event

Click on View Confirmed Tickets

Click Export CSV

Go to email and download the CSV

Open CSV and copy emails into your reminder email

Day of workshop
Moderator checklist
- Morning of
- Paste Zoom info in QCL Workshop – Workshop Control Booth chat in
Teams
- Send out reminders if you haven’t already
- Show up 30 minutes before workshop
- Print out flyers
- Put on tables where the attendees will sit
- Log into Zoom (workshops)
- Start 30 minutes before
- Check audio and video
- Make Instructor co-host
- Test runs with instructor
- Get shorten links from bit.ly ready
- Set-up camera
- Put the spotlight on workshop video feed
- Make sure the instructor is screensharing
- Time of the workshop
- Welcome everyone: (change when necessary for only virtual or only in
person workshops)
- Welcome to the QCL! Today’s workshop is (name of event) instructed
by (name of instructor. My name is (your name) and I (as well as (other
moderator)) will your moderators for today’s workshop. If you have any
questions or concerns throughout the session, please write in chat for
our virtual attendees or raise or have for our in-person attendees.
Before we start, please make sure to sign in with either the QR code or
the link provided. Lastly, this workshop will be recorded. Enjoy!
- Link sign-in survey in chat and links for workshop from instructor
Welcome! Please sign-in: https://bit.ly/3zDNzPj Link from instructor: https://github.com/CMC-QCL/Excel-L2-Workshop If you have
any questions or concerns throughout the session, please write in chat
@everyone. Thank you! Please sign-out: https://bit.ly/3EIOgdX
- Click Record
- Note: if on break, click pause not stop, we want the least number of
files made
- Check in attendees who attend on Localist
- Cross check over Qualtrics to make sure that attendees take survey
as well
- Interrupt the instructor if an attendee online has a question or if
the attendee in-person has not been seen raising their hand.
- End of workshop
- Link Exit survey in chat
- Thank everyone for coming
- Clean up and back up
- Send email reminder if there is a low rate for surveys
- Send zoom meeting recordings to attendees that attended
- Note: after every semester we dump recordings into a box file,
before CMC does it
Day after workshop
Qualtrics
- Give “Collaborate” to instructor on surveys
Zoom Recordings
- Only provided to the attendees that showed up for the workshop
- Records are ready to send the next day after the workshop

Ending email example
Subject: Thank you for attending the (name of workshop) Workshop
Hello (name of workshop) attendees,
Thank you for attending the workshop.
I have provided the links for sign-in and sign-out:
Sign-in: (Link of survey)
Sign-out: (Link of survey)
Please make sure to complete the surveys, they count as your
attendance. If you have already completed them, thank you.
(all pasted from zoom)
Note: records are only provided if you attend the workshop
Lastly, if there was any homework assigned for this workshop, please
send all documents to: qcl@cmc.edu for grading.
Thank you, (your name) QCL Graduate Fellow
Workshop Issues
New attendees after closed registration
- Email to student for information: (Do not to ask for people’s gender
for the new attendee’s emails as it is optional on our form.)
Subject: [QCL] Online Workshop on name (date at time) and name (date
at time)
[Bcc’d everyone else except QCL Fellows]
Hi (name of new attendee),
Would you like to register for both Excel 1 and Excel 2 sessions?
Also, are you able to provide me following information?
1. Please enter your student ID # (Must be 8 characters). For all
faculty/staff/non-Claremont Colleges person, please insert
00000000.
2. Gender
3. Are you a Freshman, Sophomore, Junior, Senior, Graduate Student,
Faculty, Staff or Other?
Please note that we usually close registration 1 to 3 days prior
(depending on the preparation needed to set up a working environment) to
workshop events.
Best regards,
QCL Graduate Fellow (put your name here)
Issue Ticket tab on Confirmed Tickets page 
Fill in all info 
After filling out the form, the attendee will get an email from
Localist
- Send out an email follow up to the new attendee
Subject: [QCL Workshop] Name of workshop – Availability
Hi (name of new attendee),
I have input your information into Localist for the (name of
workshop) workshop.
You should have received a Localist ticket by now.
Please let me know if you have any questions.
Best regards, QCL Graduate Fellow (put your name here)
- If you just input, the new attendee without information, send this
email
Subject: [QCL Workshop] Name of workshop – Availability
Hi (name of new attendee),
I just received a message from Janna that you would like to register
for the (name of workshop) workshop.
You should have received a Localist ticket by now.
Please let me know if you have any questions.
Best regards, QCL Graduate Fellow (put your name here)
- Note: We typically have 15 seats but wait list is 5
Check attendee’s emails
- Fix emails, sometimes they misspell their emails
g. Checklist for a Typical Workday
This is if there is no workshop or appointment going on
- Check email
- Write back to anyone
- Send any emails that have been on TODO list
- Organize your emails in their respective folders

- Update QCL website
- Day after workshop
- Send out email of closing workshop
- Recording, survey links, thank you
- Two weeks prior work
- Check what is coming in two weeks
- Set appointments to meet with instructors
- Get summaries
- Tools
- Point points
- files
- Licenses
- One week before work
- Localist and zoom
- Let Dr. Park know they are ready to be announced
- Two days before work
- Send out reminder emails to localist attendees for upcoming
workshop
- Get licenses information out
- Close old Qualtrics surveys
- Make new Qualtrics surveys for upcoming workshops
- Make QR codes/Bit.ly for upcoming workshop Other work
- Graphic Design
- Make workshops
- Workday
h. Building a Workshop
Github
- Files needed in Github
- Pre-workshop requirements
- Presentation pdf
- Files for hand-on activities
- README.md
- A summary of the workshop for localist and zoom
Pre-workshop requirements PDF
- Make in program you would like to use (i.e., Powerpoint, ArcGis
Stories)
- Make it into a PDF to send before workshop
- Downloading software How to for Mac and Windows
- License information
- Explain what to bring to workshop
Presentation PDF *
Make in program you would like to use (i.e., Powerpoint, ArcGis Stories)
- Make it into a PDF to send after workshop - Beginners’ material for
Level 1 - Required Slides (make sure to do the material in chucks) -
Title page - Before we start - Download Information - Agenda - Overview
- Vocabulary - Today’s Data - Demo Agenda - Demo Slides - Activity -
Questions - Answers - Resources - Contact info
Files
- Data files to import
- Other files of interest
j. Zoom Recording Downloads
We are reaching out today with a friendly and important reminder to
please transfer or delete your older Zoom cloud recordings within your
Zoom account to help ensure that we can continue to provide this service
to our faculty and staff without accruing additional storage
expenses.
Our Zoom cloud recording storage currently has a shared quota of 1
terabyte for all users and about 1 gigabyte of storage per individual
user. However, we now have several Zoom accounts that are way over the 1
gigabyte storage allotment. To collectively help save space, we
recommend that all users download their Zoom recordings and store them
in an alternate location, such as Box where much more storage space is
available. Once you’ve stored the recordings in an alternate location,
please make sure to go back and delete the recordings from your Zoom
cloud storage.
Action Needed:
- If you use Zoom cloud recording – please follow the below
instructions for offloading your recordings and then delete them off
Zoom once transferred
How to Download Your Zoom Cloud Recordings:
Login to the Zoom.us web portal (https://zoom.us)
In the left-hand navigation menu, click Recordings (direct link:
https://zoom.us/recording)
Click More next to a meeting recording and click
Download
- Click Download on the pop-up that appears
- Click Allow if prompted for permission to Download multiple
files.
- Check your Downloads folder for your recording files (.m4a for audio
and .mp4 for video)
Once downloaded, you can upload your files to your Box account (https://claremontmckenna.box.com). Box has a very large
storage capacity per user and can be increased when necessary.
Once your files are on Box or stored somewhere safe off Zoom, you can
share your files with others using the instructions outlined in the
attached PDF guide called “Sharing Files in Box”.
Alternatively, if you’d like to use local recording instead with
Zoom, we have attached guides for this as well. However, we only
recommend this for non-critical events and for use outside of the
classroom setting.
pic20
pic21
pic22
pic23
pic24
pic25
pic26
pic27 
l. How to schedule meetings on Zoom
meeting1 
meeting2 
LS0tDQp0aXRsZTogIkdyYWR1YXRlIEZlbGxvd3MgSGFuZGJvb2siDQpzdWJ0aXRsZTogIk5ldyBlbXBsb3llZSBndWlkZSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KZGF0ZTogIkxhc3QgY29tcGlsZWQgb24gYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVksIFRpbWU6ICVIOiVNJylgIg0KLS0tDQoNCiMjIyBUYWJsZSBvZiBjb250ZW50cw0KMS4gW1dlbGNvbWUgdG8gdGhlIFFDTF0oI1dlbGNvbWUgdG8gdGhlIFFDTCkgIA0KMi4gW0RyZXNzIGNvZGVdKCNEcmVzcyBjb2RlKSAgDQozLiBbTWF0ZXJpYWxzIG5lZWRlZF0oI01hdGVyaWFscyBuZWVkZWQpICAgDQo0LiBbTmV3IEVtcGxveWVlIFNpZ24gT25dKCNOZXcgRW1wbG95ZWUgU2lnbiBPbikgICANCiAgYS5bQmVmb3JlXSgjQmVmb3JlKSAgICANCiAgYi5bQWZ0ZXJdKCNBZnRlcikgIA0KNS4gW0VtcGxveWVlIE1hdGVyaWFsc10oI0VtcGxveWVlIE1hdGVyaWFscykNCjYuIFtBY2NvdW50cyBhbmQgU29mdHdhcmVdKCNBY2NvdW50cyBhbmQgU29mdHdhcmUpDQo3LiBbTG9naW5zIGFuZCBQYXNzd29yZHNdKCNMb2dpbnMgYW5kIFBhc3N3b3JkcykNCjguIFtTY2hlZHVsZV0oI1NjaGVkdWxlKQ0KOS4gW0dyYWR1YXRlIEZlbGxvd3MgTWVldGluZ10oI0dyYWR1YXRlIEZlbGxvd3MgTWVldGluZykNCjEwLiBbRWRpdGluZyB0aGUgUUNMLUNNQyBXZWJzaXRlXSgjRWRpdGluZyB0aGUgUUNMLUNNQyBXZWJzaXRlKQ0KMTEuIFtXb3Jrc2hvcHNdKCNXb3Jrc2hvcHMpICANCiAgYS5bU3RhcnQgb2YgU2VtZXN0ZXJdKCNTdGFydCBvZiBTZW1lc3RlcikgIA0KICBiLltQb3NzaWJsZSBXb3Jrc2hvcHNdKCNQb3NzaWJsZSBXb3Jrc2hvcHMpICANCiAgYy5bQ29uZmlybWluZyBEYXRlcyB3aXRoIEluc3RydWN0b3JzXSgjQ29uZmlybWluZyBEYXRlcyB3aXRoIEluc3RydWN0b3JzKSAgDQogIGQuW1dvcmtzZmxvd10oI1dvcmtzZmxvdykgIA0KICAgICAgLSBbVHdvIHdlZWtzIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3BdKCNUd28gd2Vla3MgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcCkNCiAgICAgIC0gW09uZSB3ZWVrIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3BdKCNPbmUgd2VlayBiZWZvcmUgZGF5IG9mIHdvcmtzaG9wKQ0KICAgICAgICAtIFtNb2RlcmF0b3JdKCNNb2RlcmF0b3IpDQogICAgICAgIC0gW1pvb21dKCNab29tKQ0KICAgICAgICAtIFtMb2NhbGlzdF0oI0xvY2FsaXN0KQ0KICAgICAgLSBbVHdvIGRheXMgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcF0oI1R3byBkYXlzIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3ApDQogICAgICAtIFtEYXkgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcF0oI0RheSBiZWZvcmUgZGF5IG9mIHdvcmtzaG9wKQ0KICAgICAgICAtIFtRdWFsdHJpY3NdKCNRdWFsdHJpY3MpIA0KICAgICAgICAtIFtCaXQubHldKCNCaXQubHkpDQogICAgICAgIC0gW0ZseWVyIFdvcmQgZG9jXSgjRmx5ZXIgV29yZCBkb2MpDQogICAgICAgIC0gW0VtYWlscyh0byBiZSB3cml0dGVuKV0oI0VtYWlscyAodG8gYmUgd3JpdHRlbikpDQogICAgICAgIC0gW1JlbWluZGVyIEVtYWlsXSgjUmVtaW5kZXIgRW1haWwpDQogICAgICAgIC0gW0F0dGVuZGVlcyBFbWFpbHNdKCNBdHRlbmRlZXMgRW1haWxzKQ0KICAgICAgLSBbRGF5IG9mIHdvcmtzaG9wXSgjRGF5IG9mIHdvcmtzaG9wKQ0KICAgICAgICAtIFtNb2RlcmF0b3IgY2hlY2tsaXN0XSgjTW9kZXJhdG9yIGNoZWNrbGlzdCkNCiAgICAgIC0gW0RheSBhZnRlciB3b3Jrc2hvcF0oI0RheSBhZnRlciB3b3Jrc2hvcCkNCiAgICAgICAgLSBbUXVhbHRyaWNzXSgjUXVhbHRyaWNzKQ0KICAgICAgICAtIFtab29tIFJlY29yZGluZ3NdKCNab29tIFJlY29yZGluZ3MpDQogICAgICAgIC0gW0VuZGluZyBlbWFpbCBleGFtcGxlXSgjRW5kaW5nIGVtYWlsIGV4YW1wbGUpDQogICAgICAtIFtXb3Jrc2hvcCBJc3N1ZXNdKCNXb3Jrc2hvcCBJc3N1ZXMpDQogIGUuIFtCdXlpbmcgYSB0aWNrZXQg4oCTIE1ha2luZyBzdXJlIGl0IHdvcmtzXSgjQnV5aW5nIGEgdGlja2V0IOKAkyBNYWtpbmcgc3VyZSBpdCB3b3JrcykNCiAgZi4gW0NoYW5naW5nIFdlYnNpdGVdKCNDaGFuZ2luZyBXZWJzaXRlKQ0KICBnLiBbQ2hlY2tsaXN0IGZvciBhIFR5cGljYWwgV29ya2RheV0oI0NoZWNrbGlzdCBmb3IgYSBUeXBpY2FsIFdvcmtkYXkpDQogIGguIFtCdWlsZGluZyBhIFdvcmtzaG9wXSgjQnVpbGRpbmcgYSBXb3Jrc2hvcCkNCiAgICAgIC0gW0dpdGh1Yl0oI0dpdGh1YikNCiAgICAgIC0gW1ByZS13b3Jrc2hvcCByZXF1aXJlbWVudHMgUERGXSgjUHJlLXdvcmtzaG9wIHJlcXVpcmVtZW50cyBQREYpDQogICAgICAtIFtQcmVzZW50YXRpb24gUERGXSgjUHJlc2VudGF0aW9uIFBERikNCiAgICAgIC0gW0ZpbGVzXSgjRmlsZXMpDQogIGkuIFtXb3Jrc2hvcHMgQnVpbGRpbmddKCNXb3Jrc2hvcHMgQnVpbGRpbmcpDQogIGouIFtab29tIFJlY29yZGluZyBEb3dubG9hZHNdKCNab29tIFJlY29yZGluZyBEb3dubG9hZHMpDQogIGsuIFtRdWFsdHJpY3MgTWFrZSBhIFdvcmtmbG93XSgjUXVhbHRyaWNzIE1ha2UgYSBXb3JrZmxvdykNCiAgbC4gW0hvdyB0byBzY2hlZHVsZSBtZWV0aW5ncyBvbiBab29tXSgjSG93IHRvIHNjaGVkdWxlIG1lZXRpbmdzIG9uIFpvb20pDQoxMi4gW1FDTCBJbXBhY3QgUmVwb3J0XSgjUUNMIEltcGFjdCBSZXBvcnQpDQogIGEuIFtRdWFsdHJpY3Mg4oCTIFJlcG9ydHNdKCNRdWFsdHJpY3Mg4oCTIFJlcG9ydHMpDQogIGIuIFtMb2NhbGlzdCDigJMgUmVwb3J0c10oI0xvY2FsaXN0IOKAkyBSZXBvcnRzKQ0KICBjLiBbU3VtbWFyaWVzXSgjU3VtbWFyaWVzKQ0KICAgICAgLSBbTWlzc2luZyBEYXRhXSgjTWlzc2luZyBEYXRhKQ0KICAgICAgLSBbTG9jYWxpc3RdKCNMb2NhbGlzdCkNCiAgICAgIC0gW1F1YWx0cmljc10oI1F1YWx0cmljcykNCiAgZC4gW1JvdWdoIERyYWZ0IEltcGFjdCBSZXBvcnRdKCNSb3VnaCBEcmFmdCBJbXBhY3QgUmVwb3J0KSAgDQoNCl9fXw0KDQojIyMgMS4gV2VsY29tZSB0byB0aGUgUUNMIDxhIG5hbWU9IldlbGNvbWUgdG8gdGhlIFFDTCI+PC9hPg0KUGFyYWdyYXBoIGFib3V0IFFDTA0KDQpNaXNzaW9uIFN0YXRlbWVudA0KDQoqKiogDQoNCiMjIyAyLiBEcmVzcyBjb2RlIDxhIG5hbWU9IkRyZXNzIGNvZGUiPjwvYT4NCk9mZmljZSBDYXN1YWwNCg0KX19fDQoNCiMjIyAzLiBNYXRlcmlhbHMgbmVlZGVkICA8YSBuYW1lPSJNYXRlcmlhbHMgbmVlZGVkICI+PC9hPg0KLSBbIF0JQ29tcHV0ZXINCg0KKioqIA0KDQojIyMgNC4gTmV3IEVtcGxveWVlIFNpZ24gT24gPGEgbmFtZT0iTmV3IEVtcGxveWVlIFNpZ24gT24iPjwvYT4NCiMjIyMgYS4gQmVmb3JlIDxhIG5hbWU9IkJlZm9yZSI+PC9hPiANCi0gW1hdCVJlc3VtZSBhbmQgQ292ZXIgTGV0dGVyIGFuZCBSZWZlcmVuY2VzICAgDQotIFtYXQlJbnRlcnZpZXcgIA0KLSBbWF0JQWNjZXB0YW5jZSAgDQoNCiMjIyMgYi4gQWZ0ZXIgPGEgbmFtZT0iQWZ0ZXIiPjwvYT4NCi0gW1hdCUhSIGVtYWlsIA0KICAtIFsgXQlPcmllbnRhdGlvbiANCiAgLSBbIF0JV29ya2RheSANCiAgICAgIC0gWyBdIElUIHdpbGwgc2VuZCB5b3UgYW4gZW1haWwgDQogICAgICAtIFsgXSBodHRwczovL3d3dy5teXdvcmtkYXkuY29tL3RoZWNsYXJlbW9udGNvbGxlZ2VzL2QvaG9tZS5odG1sZCANCiAgLSBbIF0gU2lnbmVkIGRvY3VtZW50cyANCiAgLSBbIF0gU2hvdyBVLlMuIENpdGl6ZW5zaGlwL1ZJU0EgDQogIC0gWyBdIEdldCB0ZW1wb3JhcnkgcGVybWl0IGZvciBwYXJraW5nICANCiAgICAgIC0gWyBdIFBhcmsgaW4gQ01DIHBlcm1pdCBwYXJraW5nIG9yIG9uIHRoZSBzdHJlZXQgKG5vIHBlcm1pdCBuZWVkZWQpKG1hcCBvbiBwYWdlIDQpICANCi0gWyBdIFRhbGsgYWJvdXQgU2NoZWR1bGUgIA0KLSBbIF0gU2hhZG93IGEgd29ya3Nob3AgIA0KLSBbIF0gRW1wbG95ZWUgTWF0ZXJpYWxzIChOZXh0IHBhZ2UpICANCi0gWyBdIERvd25sb2FkIFNvZnR3YXJlIChOZXh0IHBhZ2UpICANCi0gWyBdIE1ha2UgQWNjb3VudHMgKE5leHQgcGFnZSkgIA0KDQpfX18NCg0KIVtDbGFyZW1vbnQgQ2FtcHVzIE1hcF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0NsYXJlbW9udF9NYXAuanBnP3Rva2VuPUdIU0FUMEFBQUFBQUJTUlRRSkFFR0s1VUVES1VQMk9VRVpDWVIyUVBJUSAiQ2xhcmVtb250IENhbXB1cyBNYXAiKQ0KDQoqKioNCg0KIyMjIDUuIEVtcGxveWVlIE1hdGVyaWFscyA8YSBuYW1lPSJFbXBsb3llZSBNYXRlcmlhbHMiPjwvYT4gDQoNCi0gWyBdCUVtcGxveWVlIElEDQogIC0gWyBdCUdvIHRvIENvbm5lY3RzIGluIFRoZSBDbGFyZW1vbnQgQ29sbGVnZXMgTGlicmFyeSBIb25ub2xkIE11ZGQgKEggb24gbWFwLCBwYWdlIDQpDQogICAgLSBbIF0JVGFrZSBwaWN0dXJlIA0KICAgIC0gWyBdCVJlY2VpdmUgSUQNCiAgLSBbIF0JR28gdG8gU3RvcnkgSG91c2UgKDE0IG9uIG1hcCwgcGFnZSA0KQ0KICAgIC0gWyBdCUdldCBhY2Nlc3MgdG8gaW5mcmFzdHJ1Y3R1cmUgKGRvb3JzKQ0KICAgIC0gWyBdCUFsc28gbmVlZCBhIEtFWSBmb3Igb2ZmaWNlIHJvb20gDQotIFsgXQlFbWFpbCBhbmQgVXNlcm5hbWUNCiAgLSBbIF0JU2V0dXAgYXBwb2ludG1lbnQgZm9yIElUIChKZWZmKQ0KICAgIC0gWyBdCUplZmZyZXkuTmdAY2xhcmVtb250bWNrZW5uYS5lZHUgKGpuZ0BjbWMuZWR1KSBvciBoZWxwQGNtYy5lZHUNCiAgLSBbIF0JT2J0YWluIGNvbXB1dGVyIGFjY2Vzcw0KICAtIFsgXQlHZXQgcHV0IGludG8gc3lzdGVtDQotIFsgXQlLcm9ub3MNCiAgLSBbIF0JU2VuZCBlbWFpbCB0byBQYXlyb2xsDQogICAgLSBbIF0JcGF5cm9sbEBjbWMuZWR1DQogIC0gWyBdCUZpbmQgS3Jvbm9zIGluIFdvcmtkYXkNCiAgLSBbIF0JTG9nIGluIGhvdXJzIA0KICAgIC0gWyBdCVRhbGsgdG8gSmFubmENCi0gWyBdCUhlYWx0aCBEb2N1bWVudHMNCiAgLSBbIF0JaHR0cHM6Ly93d3cuY21jLmVkdS9oZWFsdGhzY3JlZW4NCi0gWyBdCVRyYWluaW5nIHdpdGggRVZFUkZJDQogIC0gWyBdCUhhemFyZCBDb21tdW5pY2F0aW9uIChDQSkNCiAgLSBbIF0gUHJvdGVjdGluZyBZb3V0aA0KICAtIFsgXQlQcmV2ZW50aW5nIEhhcmFzc21lbnQgYW5kIERpc2NyaW1pbmF0aW9uOiBOb24tU3VwZXJ2aXNvcnMNCiAgLSBbIF0JSW5qdXJ5ICYgSWxsbmVzcyBQcmV2ZW50aW9uDQogIC0gWyBdCURhdGEgU2VjdXJpdHkgYW5kIFByaXZhY3kNCiAgDQpfX18NCg0KIyMjIDYuIEFjY291bnRzIGFuZCBTb2Z0d2FyZSA8YSBuYW1lPSJBY2NvdW50cyBhbmQgU29mdHdhcmUiPjwvYT4gDQoNCiogQ01DIFNlbGYtU2VydmljZSBBY2NvdW50IE1hbmFnZW1lbnQgICAgDQogICAgLSBodHRwczovL215cGFzc3dvcmQuY2xhcmVtb250bWNrZW5uYS5lZHUvc2hvd0xvZ2luLmNjICAgIA0KLQlDTUMgRW1haWwgIA0KICAgIC0gaHR0cHM6Ly9jbWMuZWR1L21haWwvb2ZmaWNlMzY1ICANCiAgICAgIC0JQ01DIGUtbWFpbCBhZGRyZXNzOiBmaXJzdG5hbWUubGFzdG5hbWVAY2xhcmVtb250bWNrZW5uYS5lZHUgIA0KICAgICAgLQlTaG9ydC1oYW5kOiBmaXJzdHRocmVlbGV0dGVyc29meW91cmZpcnN0bmFtZWFuZHdob2xlbGFzdG5hbWVAY21jLmVkdSAgIA0KLQlEYXNoYm9hcmRzIEV2ZW50cyAgDQogICAgLQlodHRwczovL2V2ZW50cy5jbWMuZWR1L25ld2VtcGxveWVldXNlcm5hbWUvaG9tZSAgDQotCUdpdEh1YiAgDQogICAgLQlodHRwczovL2dpdGh1Yi5jb20vQ01DLVFDTCAgDQotCVdvcmtkYXkgIA0KICAgIC0JaHR0cHM6Ly93d3cubXl3b3JrZGF5LmNvbS90aGVjbGFyZW1vbnRjb2xsZWdlcy9kL2hvbWUuaHRtbGQgKHJlZmVyIHRvIHBhZ2UgMykgIA0KICAgIC0JS3Jvbm9zIChpbiBoZXJlKSAgDQotCVFDTCBIb21lIHBhZ2UgIA0KICAgIC0JY21jLmVkdS9sb2dpbiAgDQogICAgLQlodHRwczovL3d3dy5jbWMuZWR1L3FjbCAgDQotCUJveCAgIA0KICAgIC0JaHR0cHM6Ly9jbGFyZW1vbnRtY2tlbm5hLmFjY291bnQuYm94LmNvbS9sb2dpbj9yZWRpcmVjdF91cmw9JTJGZm9sZGVyJTJGMCAgDQotCUJpdC5seSAgDQogICAgLQlObyBhY2NvdW50ICh5b3Ugd2lsbCB1c2UgaXQgYSBsb3QpICANCiAgICAtCWh0dHBzOi8vYml0bHkuY29tLyAgDQotCVF1YWx0cmljcyAgDQogICAgLQlodHRwczovL3FmcmVlYWNjb3VudHNzamMxLmF6MS5xdWFsdHJpY3MuY29tL2xvZ2luP3BhdGg9JTJGUSUyRk15UHJvamVjdHNTZWN0aW9uJnByb2R1Y3Q9cHJvamVjdC1zdG9yZS1wcm94eSAgDQotCUxvY2FsaXN0ICANCiAgICAtCWh0dHBzOi8vZXZlbnRzLmNtYy5lZHUvYWRtaW4gIA0KLQlab29tICANCiAgICAtCWh0dHBzOi8vY21jLWl0cy56b29tLnVzICANCi0JVGVhbXMgIA0KICAgIC0JTWFrZSBzdXJlIHRvIGRvd25sb2FkIGRlc2t0b3AgdmVyc2lvbiBhbmQgbW9iaWxlIGFzIHdlbGwgIA0KICAgIC0JaHR0cHM6Ly90ZWFtcy5taWNyb3NvZnQuY29tICANCi0gSW5zdGFncmFtICANCiAgICAtIGh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vY21jLnFjbC8gIA0KDQpfSXNzdWVzOiBjb250YWN0IGFub3RoZXIgR3JhZHVhdGUgRmVsbG93IG9yIElUIChoZWxwQGNtYy5lZHUpXyAgDQoNCioqKg0KDQojIyMgNy4gTG9naW5zIGFuZCBQYXNzd29yZHMgPGEgbmFtZT0iTG9naW5zIGFuZCBQYXNzd29yZHMiPjwvYT4NCg0KfEFjY291bnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFVzZXJuYW1lIHxQYXNzd29yZCB8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS06fC0tLS0tLS0tOnwNCnxDTUMgU2VsZi1TZXJ2aWNlIEFjY291bnQgTWFuYWdlbWVudHwgICAgICAgICB8ICAgICAgICAgfA0KfENNQyBFbWFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8DQp8RGFzaGJvYXJkcyBFdmVudHMgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwNCnxHaXRIdWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfA0KfFdvcmtkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8DQp8UUNMIEhvbWUgcGFnZSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwNCnxCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfA0KfEJpdC5seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8DQp8UXVhbHRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwNCnxMb2NhbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfA0KfFpvb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8DQp8VGVhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwNCnxJbnN0YWdyYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfA0KX0ZpcmVmb3g6IGJvb2ttYXJrIHdlYnNpdGVzXw0KDQpfX18NCg0KIyMjIDguIFNjaGVkdWxlIDxhIG5hbWU9IlNjaGVkdWxlIj48L2E+DQoNCl9fSW1wb3J0YW50IERhdGVzX18gIA0KDQoqIFRlYW0gbWVldGluZ3MgIA0KICAgIC0JQml3ZWVrbHk6IFdlZG5lc2RheXMgMTBhbSAtMTFhbSAgDQotCUdyYWR1YXRlIEZlbGxvdyBtZWV0aW5ncyAgDQogICAgLQlUYWxrIHRvIERyLiBQYXJrIHRvIHNldCB1cCBiZXN0IHRpbWUgIA0KICAgIC0JQ3VycmVudCBGZWxsb3cgbWVldGluZzogOTozMGFtLTEwYW0gIA0KICAgIC0JTmV3IFRpbWU6IF9fX19fX19fX19fX19fX19fX19fX19fICANCi0JV29ya3Nob3BzICAgDQogICAgLQlXZWRuZXNkYXlzIDNwbS01cG0gb3IgNHBtLTZwbSAgDQogICAgLQlGcmlkYXlzIDlhbS0xMWFtIG9yIDEwYW0tMTJwbSAgDQotCVN0YWZmIGRheXMNCiAgICAtCUphbm5hIHdpbGwgc2VuZCBvdXQgZW1haWwgICAgDQotIEVtcGxveWVlcyBTY2hlZHVsZSAoMjAgaG91cnMgYSB3ZWVrKSAgDQogICAgLQlUYWxrIHRvIERyLiBQYXJrICAgDQoNCg0KfE1vbmRheQl8VHVlc2RheSAgfFdlZG5lc2RheSB8VGh1cnNkYXkgfEZyaWRheSB8DQp8Oi0tLS0tLXw6LS0tLS0tLTp8Oi0tLS0tLS0tOnw6LS0tLS0tLTp8LS0tLS0tOnwNCnxXb3Jrc2hvcDogNXBtIOKAkyA3cG18Q3VycmVudCBGZWxsb3cgbWVldGluZzogOTozMGFtLTEwYW18Qml3ZWVrbHkgVGVhbSBtZWV0aW5nOiAxMGFtIC0xMWFtfCAgICAgICAgfFdvcmtzaG9wOiAxMGFtLTEycG18DQoNCl9EYXlzIG9mZjogSG9saWRheXMgYW5kIEFjYWRlbWljIGJyZWFrXw0KDQoqKioNCg0KIyMjIDkuIEdyYWR1YXRlIEZlbGxvd3MgTWVldGluZyA8YSBuYW1lPSJHcmFkdWF0ZSBGZWxsb3dzIE1lZXRpbmciPjwvYT4NCg0KKiBCT1ggIA0KICAgIC0JVGl0bGVkOiBRQ0wgRmVsbG93cyBNZWV0aW5nIEFnZW5kYSAgDQogICAgLQlodHRwczovL2NsYXJlbW9udG1ja2VubmEuYXBwLmJveC5jb20vZm9sZGVyLzAgIA0KICAgIA0KIVtRQ0wgRmVsbG93cyBNZWV0aW5nIEFnZW5kYV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1BpY3R1cmUyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFUURLNTRFUE9OVU1NR0tTVVlSMlRYQ1EpDQoNCi0JQWdlbmRhICANCiAgICAtCVdyaXRlIG1lZXRpbmcgbm90ZXMgIA0KICAgICAgICAtIEJlZm9yZSBtZWV0aW5nICANCiAgICAgICAgICAtIExldCBEci4gUGFyayB3cml0ZSBtaW51dGVzIHVubGVzcyBoZSBhc2tzIHlvdSAgDQogICAgLQlGb2xsb3cgYWxvbmcgaW4gdGhlIG1lZXRpbmcgIA0KICAgIC0JVE8gRE9zICANCiAgICAgICAgLQlZb3VyIGFzc2lnbm1lbnRzIGZvciB0aGUgd2VlayAgDQoNCiFbWW91ciBhc3NpZ25tZW50cyBmb3IgdGhlIHdlZWtdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9QaWN0dXJlMy5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVZFRENKQ1VYNjNFQ0ZOQkNZUjJUWUtRKQ0KDQpfX18NCg0KIyMjIDEwLiBFZGl0aW5nIHRoZSBRQ0wtQ01DIFdlYnNpdGUgPGEgbmFtZT0iRWRpdGluZyB0aGUgUUNMLUNNQyBXZWJzaXRlIj48L2E+DQoNCkV2ZXJ5IHdlZWssIHdlIHVwZGF0ZSBjbWMuZWR1L3FjbC9xY2wtd29ya3Nob3AgcGFnZSwgd2hlbmV2ZXIgd2Ugb3BlbiBvciBjbG9zZSByZWdpc3RyYXRpb24gKyB1cGRhdGUgb3VyIHNjaGVkdWxlDQoNCkluIHRlcm1zIG9mIHdlYnNpdGUgYWNjZXNzOg0KDQogIDEuIExvZyBpbiBhdCBjbWMuZWR1L2xvZ2luDQogIDIuIEdvIHRvIGNtYy5lZHUvcWNsDQogIDMuIFNlZSDigJxWaWV3LOKAnSDigJxFZGl0LOKAnSBhbmQg4oCcUmV2aXNpb25z4oCdIHRhYnMgcmlnaHQgYWJvdmUgYm9keQ0KDQohW3dlYnNpdGUgYWNjZXNzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUGljdHVyZTQucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0Y0QUpUMkRMV05UTU8yVk9LWVIyVFpVUSkNCg0KKioqDQoNCiMjIyAxMS4gV29ya3Nob3BzIDxhIG5hbWU9IldvcmtzaG9wcyI+PC9hPg0KDQojIyMjIGEuIFN0YXJ0IG9mIFNlbWVzdGVyIDxhIG5hbWU9IlN0YXJ0IG9mIFNlbWVzdGVyIj48L2E+DQoNCioJVG9waWNzDQogICAgLQlQaWNrDQogICAgLQlEci4gUGFyayBpbiBGZWxsb3dzIG1lZXRpbmcNCi0JRGF0ZXMNCiAgICAtCUFzc2lnbg0KICAgIC0JRHIuIFBhcmsgaW4gRmVsbG93cyBtZWV0aW5nDQotCUluc3RydWN0b3JzIA0KICAgIC0JQXNzaWduDQogICAgLQlEci4gUGFyayBpbiBGZWxsb3dzIG1lZXRpbmcNCg0KIyMjIyBiLiBQb3NzaWJsZSBXb3Jrc2hvcHMgPGEgbmFtZT0iUG9zc2libGUgV29ya3Nob3BzIj48L2E+DQoNCioJRHIuIFBhcmsNCiAgICAtCVIgUHJvZ3JhbW1pbmcgQmFzaWNzICAobGV2ZWwgMSkgICANCiAgICAtCURhdGEgV3JhbmdsaW5nIHdpdGggUiAobGV2ZWwgMikNCiAgICAtCVRhYmxlYXUgIChsZXZlbCAxKSAgIA0KLQlCaGF2ZW4NCiAgICAtCUdldCBFcXVpcHBlZCB3aXRoIExhVGVYICAobGV2ZWwgMSkgICAgICAgICAgICAgICANCiAgICAtCUdldCBFcXVpcHBlZCB3aXRoIE1BVExBQiAgKGxldmVsIDEpICAgICAgDQotCVZhbmVzc2ENCiAgICAtCUV4Y2VsIChsZXZlbCAxKSAgICANCiAgICAtCVNRTCAobGV2ZWwgMSkgICAoRmluZCBjbG91ZCBiYXNlZCBjb21wbGllciB0aGF0IGltcG9ydHMgZmlsZXMgbGlrZSBjc3YgYW5kIHNxbCkNCiAgICAtCUdJUyAobGV2ZWwgMSkgKEFyY0dJUyBPbmxpbmUgZm9yIE1hYyBhbmQgV2luZG93cykNCi0JU2FtIEtpbSANCiAgICAtCVNUQVRBICAobGV2ZWwgMSkNCiAgICAtCVNUQVRBIChsZXZlbCAyKSAtLSBkZXZlbG9wIHdpdGggU2FtIExlZQ0KLQlPdGhlcnMgKG5lZWQgaW5zdHJ1Y3RvcnMpDQogICAgLQlKdWxpYSA9IEFsZm9uc28gTGFuZGVyb3MgYWxhbmRlcm9zQHVjbGEuZWR1DQogICAgLQlYU0VERQ0KICAgIC0JQmFzaCA9IEJyYWQgTWNDYXVsZXkgYm1jY2F1bGV5QGhtYy5lZHUNCiAgICAtCVVuaXggU2hlbGwgYW5kIEdpdCA9IEplYW5pbmUgRmlubiBqZWFuaW5lLmZpbm5AY2xhcmVtb250LmVkdQ0KICAgIC0JTVMgUG93ZXIgQXV0b21hdGUgYXMgUHJlIHRvIFBvd2VyIEJJID0gQ2luZHkgQ2hlbmcgY2luZHkuY2hlbmdAY2d1LmVkdQ0KICAgIC0JTVMgUG93ZXIgUXVlcnkgYXMgUHJlIHRvIFBvd2VyIEJJID0gQ2luZHkgQ2hlbmcgY2luZHkuY2hlbmdAY2d1LmVkdQ0KICAgIC0JQWx0ZXJ5eCA9IEJyYW5kb24gQmFrIGJyYW5kb25iYWtAZ21haWwuY29tIA0KICAgIC0JTWFjaGluZSBMZWFybmluZyA9IEFhc2hpdGEgS2VzYXJ3YW5pIGFrZXNhcndhbmlAaG1jLmVkdSANCiAgICAtCVB5dGhvbiANCiAgICAtIFBvd2VyIEJJID0gSmlsbGlhbiBTZXltb3VyIA0KICAgIA0KIyMjIyBjLiBDb25maXJtaW5nIERhdGVzIHdpdGggSW5zdHJ1Y3RvcnMgPGEgbmFtZT0iQ29uZmlybWluZyBEYXRlcyB3aXRoIEluc3RydWN0b3JzIj48L2E+DQoNClN1YmplY3Q6IFFDTCBXb3Jrc2hvcHMgLSBjb25maXJtaW5nIGRhdGVzDQoNCkdvb2QgYWZ0ZXJub29uIEJoYXZlbiwgIA0KDQpIYXBweSBUdWVzZGF5ISBJIGhvcGUgeW91IGFyZSBkb2luZyB3ZWxsISBBcyB0aGUgbmV3IHNlbWVzdGVyIGFwcHJvYWNoZXMsIEkgd2FudGVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZGF0ZXMgd29yayBmb3IgeW91IHRvIGluc3RydWN0OiAgDQoNCk1vbmRheSwgSmFudWFyeSAyNCwgMjAyMiwgYXQgNXBtIC0gN3BtIGZvciBHZXQgRXF1aXBwZWQgd2l0aCBMYVRlWCBhcyBhbiBvbmxpbmUgd29ya3Nob3AgIA0KDQpNb25kYXksIEZlYnJ1YXJ5IDIxLCAyMDIyLCBhdCA1cG0gLSA3cG0gZm9yIEdldCBFcXVpcHBlZCB3aXRoIE1BVExBQiAoVEJBIGFzIGEgaHlicmlkLCBpbi1wZXJzb24sIG9yIG9ubGluZSB3b3Jrc2hvcCBkdWUgdG8gdGhlIENvdmlkIHBvbGljaWVzKSAgICANCg0KV2UgaGF2ZSBvbmx5IHNjaGVkdWxlZCB1cCB0byBTcHJpbmcgQnJlYWssIEkgd2lsbCBoYXZlIHRvIGZvbGxvdyB1cCBpbiB0aGUgZnV0dXJlIGZvciB0aGUgcmVzdCBvZiB0aGUgc2VtZXN0ZXIncyBkYXRlcy4gRG8gdGhlc2UgZGF0ZXMgYW5kIHRpbWUgd29yayBmb3IgeW91IHRvIGluc3RydWN0IHRoZSB3b3Jrc2hvcHM/DQoNClRoYW5rIHlvdSwgICANClZhbmVzc2EgQXJpYXMgQ2FzaWxsYXMgIA0KR3JhZHVhdGUgRmVsbG93IC0gTXVydHkgU3VuYWsgUXVhbnRpdGF0aXZlIGFuZCBDb21wdXRpbmcgTGFiIChRQ0wpICANCkNsYXJlbW9udCBNY2tlbm5hIENvbGxlZ2UgIA0KdmFuZXNzYS5jYXNpbGxhc0BjbGFyZW1vbnRtY2tlbm5hLmVkdSAgDQoNCl9fXw0KDQojIyMjIGQuIFdvcmtzZmxvdyA8YSBuYW1lPSJXb3Jrc2Zsb3ciPjwvYT4NCg0KIyMjIyBUd28gd2Vla3MgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcCAgPGEgbmFtZT0iVHdvIHdlZWtzIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3AiPjwvYT4NCg0KKglDb250YWN0IEluc3RydWN0b3IgIA0KLSBTZXR1cCBtZWV0aW5nDQogICAgLSBBZ2VuZGEgb2YgbWVldGluZw0KICAgIC0gU3VtbWFyeSBvZiBsb2NhbGlzdA0KICAgIC0gU29mdHdhcmUNCiAgICAtIFdlYnNpdGVzDQogICAgLSBMaWNlbnNlcw0KICAgICAgICANCl9fX0luc3RydWN0b3JzIE5vdGVzIHR1cm5lZCBpbnRvIFN1bW1hcmllc19fXw0KDQpHb29kIGFmdGVybm9vbiBbaW5zdHJ1Y3RvcuKAmXMgbmFtZV0sICANCg0KSGFwcHkgVHVlc2RheSEgSSBhbSBsb29raW5nIGZvcndhcmQgdG8geW91ciBkcnlydW4gb2YgW3dvcmtzaG9wXSEgSSBhbSBzdGFydGluZyB0byBjcmVhdGUgdGhlIHJlZ2lzdHJhdGlvbiBwYWdlIGZvciB0aGUgd29ya3Nob3AgYW5kIHdvdWxkIGxpa2UgdG8gZ2V0IGEgYml0IG9mIGluZm9ybWF0aW9uIGZyb20geW91IGFib3V0IHRoZSB3b3Jrc2hvcC4gICANCg0KRmlyc3QsIGRvIHlvdSBoYXZlIGEgc3VtbWFyeSBwYWdlIGZvciB5b3VyIHdvcmtzaG9wPyBJIGhhdmUgYW4gZXhhbXBsZSBvZiBTYW0gTGVlJ3MgYmVsb3c6ICAgDQoNCiFbZXhhbXBsZSBvZiBTYW0gTGVlJ3NdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9QaWN0dXJlNS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUhRR0VYTUZMQURRN042S1VZUjJUMzJBKQ0KDQpTZWNvbmQsIGRvIHlvdSBoYXZlIGFueSBwcmUtd29ya3Nob3AgcmVxdWlyZW1lbnRzIHRoYXQgdGhlIGF0dGVuZGVlcyBuZWVkIHRvIGRvIGJlZm9yZSB0aGUgd29ya3Nob3A/IExpa2UgZG93bmxvYWQgcHJvZ3JhbXMgb3Igc2lnbiB1cCBmb3IgYSBsaWNlbnNlLiAgICANClRoaXJkLCB3aGF0IHRpbWUgZGlkIHlvdSB3YW50IHRvIGRvIHlvdXIgd29ya3Nob3AgYXQgM3BtLTVwbSBvciA0cG0tNnBtPyAgDQpGb3VydGgsIHdvdWxkIHlvdSBsaWtlIHRoaXMgd29ya3Nob3AgdG8gYmUgYSBoeWJyaWQsIG9ubGluZSBvbmx5IG9yIGluLXBlcnNvbiBvbmx5PyAgDQpMYXN0bHksIGlzIHRoZXJlIGFueSBpbmZvcm1hdGlvbiB5b3Ugd291bGQgbGlrZSBtZSB0byBsZXQgdGhlIGF0dGVuZGVlcyBrbm93IGFib3V0IGJlZm9yZSB3YWxraW5nIGludG8gdGhlIHdvcmtzaG9wPyBsaWtlIHdlYnNpdGUgd2hlcmUgdG8gZG93bmxvYWQgZmlsZXMgb3IgYSBub3RlIGFib3V0IHRoZSBkYXRhLiAgDQpUaGFuayB5b3UgZm9yIHRoaXMgaW5mb3JtYXRpb24sIGl0IHdpbGwgaGVscCBtZSBpbiBnZXR0aW5nIHRoZSB3b3Jrc2hvcCdzIHJlZ2lzdHJhdGlvbiByZWFkeS4gIA0KDQpUaGFuayB5b3UsICANCkdyYWR1YXRlIEZlbGxvdyAtIE11cnR5IFN1bmFrIFF1YW50aXRhdGl2ZSBhbmQgQ29tcHV0aW5nIExhYiAoUUNMKSAgDQoNCl9fX1tRQ0wgV29ya3Nob3BdIFRpdGxlX19fICAgIA0KDQpBYm91dCB0aGlzIEV2ZW50ICANClRpdGxlICANClN1bW1hcnkgIA0KQWdlbmRhOiAgIA0KTGVhcm5pbmcgT2JqZWN0aXZlczogKFlvdSB3aWxsIGxlYXJuIGhvdyB0bykgICANClByZXJlcXVpc2l0ZTogICAgDQpMb2NhdGlvbjogICAgDQpQYXJ0aWNpcGFudHM6ICAgDQoNCl9fX0V4YW1wbGUgSW5zdHJ1Y3RvcnMgTm90ZXMgdHVybmVkIGludG8gU3VtbWFyaWVzX19fICAgDQoNCl9bUUNMIFdvcmtzaG9wXSBSIFByb2dyYW1taW5nIEJhc2ljcyAoTGV2ZWwgMSDigJMgQ29kaW5nKV8NCg0KQWJvdXQgdGhpcyBFdmVudA0KDQpSIFByb2dyYW1taW5nIEJhc2ljcyAoTGV2ZWwgMSAtIENvZGluZykNCiANClN1bW1hcnk6ICANClIgaXMgYW4gb3Blbi1zb3VyY2Ugc3RhdGlzdGljYWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIFIgaXMgd2lkZWx5IHVzZWQgaW4gaW5kdXN0cnkgYXMgd2VsbCBhcyBpbiBhY2FkZW1pYSBmb3Igc3RhdGlzdGljYWwgYW5hbHlzaXMgYW5kIGRhdGEgdmlzdWFsaXphdGlvbi4gSW4gdGhpcyB3b3Jrc2hvcCwgd2UgaW50cm9kdWNlIHRoZSBiYXNpY3Mgb2YgdGhlIFIgbGFuZ3VhZ2UgYW5kIGl0cyBwcm9ncmFtbWluZyBlbnZpcm9ubWVudCB0aHJvdWdoIHNpbXBsZSBoYW5kcy1vbiBleGFtcGxlcy4NClRoaXMgd29ya3Nob3AgaXMgZGVzaWduZWQgZm9yIGJlZ2lubmVycyBpbiBSIHByb2dyYW1taW5nLCBzbyBubyBwcmlvciBrbm93bGVkZ2Ugb2YgUiBwcm9ncmFtbWluZyBpcyBuZWVkZWQuIEhvd2V2ZXIsIGdlbmVyYWwgcHJvZ3JhbW1pbmcga25vd2xlZGdlIGluIGFueSBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aWxsIGJlIGhlbHAgdW5kZXJzdGFuZCB0aGUgcHJvZ3JhbW1pbmcgY29uY2VwdHMuDQpXZSB3aWxsIGJlIHVzaW5nIFJTdHVkaW8gQ2xvdWQgZm9yIGhhbmRzLW9uLiBQbGVhc2UgY3JlYXRlIGEgZnJlZSBhY2NvdW50IGF0IGh0dHBzOi8vcnN0dWRpby5jbG91ZCBiZWZvcmUgam9pbiB0aGUgd29ya3Nob3AuDQoNCkFnZW5kYTogIA0K4oCiCUJhc2ljcyBvZiBSIGFuZCBSU3R1ZGlvDQrigKIJUiBQcm9ncmFtbWluZyBFbnZpcm9ubWVudDogV29ya3NwYWNlLCBXb3JraW5nIERpcmVjdG9yeSwgUGFja2FnZQ0K4oCiCVIgb2JqZWN0cyAoZGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9uKQ0K4oCiCVIgcGFja2FnZXMgZm9yIGRhdGEgaW1wb3J0IGFuZCBleHBvcnQNCuKAoglSIGdyYXBoaWNzIGZvciBzaW1wbGUgcGxvdHRpbmcgbWV0aG9kcw0K4oCiCUJhc2ljIHN0YXRpc3RpY2FsIGFuYWx5c2lzIHVzaW5nIFINCg0KTG9jYXRpb246ICANCkh5YnJpZCAoSW4tcGVyc29uOiBRQ0wgQ2xhc3Nyb29tLCBPbmxpbmU6IFpvb20gaW5mb3JtYXRpb24gd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgYXR0ZW5kZWVzIGFmdGVyIHJlZ2lzdHJhdGlvbikNCkNsaWNrIGhlcmUgdG8gZmluZCB5b3VyIHdheSB0byB0aGUgUUNMLg0KDQpQYXJ0aWNpcGFudHM6ICANCkNNQyBTdHVkZW50cywgRmFjdWx0eSwgYW5kIFN0YWZmICAgDQpfX18NCg0KX0RhdGEgV3JhbmdsaW5nIHdpdGggUiAoTGV2ZWwgMiAtIERhdGEpXw0KDQpTdW1tYXJ5OiAgDQpEYXRhIHdyYW5nbGluZyBpcyB0aGUgcHJvY2VzcyBvZiBvYnRhaW5pbmcsIGNsZWFuaW5nLCByZXNoYXBpbmcsIGFuZCB0cmFuc2Zvcm1pbmcgcmF3IChhbmQgbWVzc3kpIGRhdGEgaW50byBhIHVzZWFibGUgZm9ybSBvZiBwcm9jZXNzZWQgKGFuZCB0aWR5KSBkYXRhLiBJdCBpcyBrbm93biB0aGF0IGEgbWFqb3JpdHkgb2YgZGF0YSBhbmFseXN0cyBhbmQgZGF0YSBzY2llbnRpc3RzIHNwZW5kIGFzIG11Y2ggYXMgODAlIG9mIHRoZWlyIHRpbWUgb24gZGF0YSB3cmFuZ2xpbmcuIFNvIGl0J3MgZXNzZW50aWFsIHRvIGdldCBmYW1pbGlhciB3aXRoIGdvb2QgZGF0YSB3cmFuZ2xpbmcgdG9vbHMgdGhhdCBoZWxwIHlvdSBzYXZlIHRpbWUgYW5kIGF2b2lkIGVycm9ycy4gSW4gdGhpcyBoYW5kcy1vbiB3b3Jrc2hvcCwgeW91IHdpbGwgbGVhcm4gYmFzaWMgc2tpbGxzIHRvIGltcG9ydCwgZXhwb3J0LCBjbGVhbiwgcmVzaGFwZSwgdHJhbnNmb3JtLCBhbmQgdmlzdWFsaXplIGRhdGEgdXNpbmcgd2VsbC1rbm93biBkYXRhIHNjaWVuY2UgcGFja2FnZSBjYWxsZWQgdGlkeXZlcnNlLg0KDQpMZWFybmluZyBPYmplY3RpdmVzOiAoWW91IHdpbGwgbGVhcm4gaG93IHRvKSAgDQpJbXBvcnQgYW5kIGV4cG9ydCBkYXRhDQpDbGVhbiwgcmVzaGFwZSBhbmQgdHJhbnNmb3JtIGRhdGENCk1ha2UgbWVzc3kgZGF0YSBpbnRvIHRpZHkgZGF0YQ0KVmlzdWFsaXplIHRpZHkgZGF0YSB1c2luZyBnZ3Bsb3QyIChpZiB0aW1lIHBlcm1pdHMpDQoNClByZXJlcXVpc2l0ZXM6ICANCkJhc2ljIGtub3dsZWRnZSBvZiBSIGFuZCBSU3R1ZGlvIChlLmcuLCBSIFByb2dyYW1taW5nIGZvciBCZWdpbm5lcnMgLSBMZXZlbCAxKQ0KUlN0dWRpbyBDbG91ZCBhY2NvdW50OyBpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUgeWV0LCBwbGVhc2UgY3JlYXRlIGEgbmV3IGFjY291bnQgZnJvbSBodHRwczovL3JzdHVkaW8uY2xvdWQgc2l0ZS4NClRpZHl2ZXJzZSBwYWNrYWdlOyBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSB0aWR5dmVyc2UgcGFja2FnZSBpbiB5b3VyIFIgZW52aXJvbm1lbnQuIFNlZSBodHRwczovL3d3dy50aWR5dmVyc2Uub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KDQpMb2NhdGlvbjogIA0KSHlicmlkIChJbi1wZXJzb246IFFDTCBDbGFzc3Jvb20sIE9ubGluZTogWm9vbSBpbmZvcm1hdGlvbiB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBhdHRlbmRlZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uKQ0KQ2xpY2sgaGVyZSB0byBmaW5kIHlvdXIgd2F5IHRvIHRoZSBRQ0wuDQoNClBhcnRpY2lwYW50czogIA0KQ01DIFN0dWRlbnRzLCBGYWN1bHR5LCBhbmQgU3RhZmYgICANCl9fXw0KDQpfR0lTIC0gUGFydCAyIChMZXZlbCAxIC0gRGF0YSkgV29ya3Nob3BfDQoNCkFib3V0IHRoaXMgRXZlbnQNCg0KU3VtbWFyeTogIA0KVGhpcyB3b3Jrc2hvcCB3aWxsIGludHJvZHVjZSB5b3UgdG8gdGhlIGV2ZXItZXhwYW5kaW5nIGFuZCBmYXNjaW5hdGluZyB3b3JsZCBvZiBnZW9ncmFwaGljIGluZm9ybWF0aW9uIHN5c3RlbXMgKEdJUykuIEluIHRocmVlIDItaG91ciBzZXNzaW9ucyB5b3Ugd2lsbCBsZWFybiBhYm91dCB3aGF0IEdJUyBpcywgaG93IGl0IGlzIHVzZWQgaW4gYSBtdWx0aXR1ZGUgb2YgaW5kdXN0cmllcyBhbmQgZmllbGRzLCBhbmQgaG93IHRvIGdldCBzdGFydGVkIHVzaW5nIEdJUyBzb2Z0d2FyZS4gV2Ugd2lsbCBleGFtaW5lIEdJUyBjb25jZXB0cyBhbmQgc29mdHdhcmUgdG9vbHMgdXNlZCB0byB2aXN1YWxpemUgcmVhbC13b3JsZCBmZWF0dXJlcywgZGlzY292ZXIgcGF0dGVybnMsIGFuZCBjb21tdW5pY2F0ZSBpbmZvcm1hdGlvbi4gUHJpbWFyaWx5IHVzaW5nIEFyY0dJUyBPbmxpbmUgKGlmIHlvdSBjYW4gaHlwZXJsaW5rOiBodHRwczovL2RvYy5hcmNnaXMuY29tL2VuL2FyY2dpcy1vbmxpbmUvZ2V0LXN0YXJ0ZWQvd2hhdC1pcy1hZ29sLmh0bSkgeW91IHdpbGwgd29yayB3aXRoIEdJUyBtYXBzLCBleHBsb3JlIGRhdGEsIGFuZCBhbmFseXplIG1hcHMgYW5kIGRhdGEgYXMgeW91IGxlYXJuIGZ1bmRhbWVudGFsIGNvbmNlcHRzIHRoYXQgdW5kZXJsaWUgR0lTIHRlY2hub2xvZ3kuDQpUaHJvdWdoIGEgc2VyaWVzIG9mIHByZXNlbnRhdGlvbnMsIGluLWNsYXNzIHR1dG9yaWFscywgYW5kIGhvbWV3b3JrIGFzc2lnbm1lbnRzIHRoaXMgd29ya3Nob3Agd2lsbCBnaXZlIHlvdSBhIHN0cm9uZyBiZWdpbm5pbmcgZm91bmRhdGlvbiBvbiBob3cgdG8gbWFrZSBtYXBzIGFuZCBleHBsb3JlIHNwYXRpYWwgZGF0YSB0byBpZGVudGlmeSBwYXR0ZXJucyBhbmQgaW5zaWdodHMgaW4geW91ciBkYXRhIHlvdSBuZXZlciBrbmV3IHBvc3NpYmxlLiBZb3Ugd2lsbCBjb21lIGF3YXkgZnJvbSB0aGlzIHdvcmtzaG9wIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgeW91IG5lZWQgdG8gc3RhcnQgd29ya2luZyB3aXRoIEdJUyBhbmQgdXRpbGl6ZSBpdCBpbiB5b3VyIG93biB3b3JrIGFuZCBleHBsb3JhdGlvbnMuIFlvdSBkbyBub3QgbmVlZCBhbnkgcHJldmlvdXMgZXhwZXJpZW5jZSDigJMganVzdCB5b3VyIG93biBjdXJpb3NpdHkhIA0KU3R1ZGVudHMgaW4gdGhpcyB3b3Jrc2hvcCAoaW4gZmFjdCwgYWxsIENsYXJlbW9udCBDb2xsZWdlcyBzdHVkZW50cykgaGF2ZSBmcmVlIGFjY2VzcyB0byBhIHdpZGUgdmFyaWV0eSBFc3JpIEdJUyBwcm9kdWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIG91dCB0aGUgQ2xhcmVtb250IENvbGxlZ2VzIExpYnJhcnkgR2VvZ3JhcGhpYyBJbmZvcm1hdGlvbiBTeXN0ZW0gKEdJUykgU2VydmljZXMgaG9tZSBwYWdlLCBodHRwczovL2xpYnJhcnkuY2xhcmVtb250LmVkdS9naXMvIA0KDQpMZWFybmluZyBPYmplY3RpdmVzOiAoWW91IHdpbGwgbGVhcm4gaG93IHRvKSAgDQpUb3BpY3Mgd2lsbCBpbmNsdWRlOiANCuKAoglJbnRyb2R1Y3Rpb24gdG8gdGhlIEdJUyBQbGF0Zm9ybSANCuKAoglUaGVvcmV0aWNhbCBiYXNpcyBvZiBHSVMgYW5kIHRoZSBHZW9ncmFwaGljIEFwcHJvYWNoIA0K4oCiCVdoYXQgY2FuIHlvdSBkbyB3aXRoIEdJUz8gDQrigKIJVW5kZXJzdGFuZGluZyBHSVMgZGF0YSANCuKAoglBbiBpbnRyb2R1Y3Rpb24gdG8gQ29vcmRpbmF0ZSBzeXN0ZW1zIGFuZCBQcm9qZWN0aW9ucyANCuKAoglBY3F1aXJpbmcgYW5kIHNlbGVjdGluZyBHSVMgRGF0YSANCuKAoglVdGlsaXppbmcgYW5kIHByZXBhcmluZyB5b3VyIG93biBkYXRhIGZvciBHSVMgDQrigKIJQ3JlYXRpbmcgbWFwcyDigJMgYmFzaWMgY2FydG9ncmFwaHksIHN5bWJvbG9neSANCuKAoglUaGUgVVMgQ2Vuc3VzIGFuZCBHSVMgDQrigKIJSW50cm9kdWN0b3J5IFNwYXRpYWwgQW5hbHlzaXMgDQrigKIJU2hhcmluZyByZXN1bHRzIOKAkyBwaHlzaWNhbCBtYXBzIGFuZCB0aGUgd29ybGQgb25saW5lIG1hcHMgDQoNCkxvY2F0aW9uOiAgDQpUaGUgZm9sbG93aW5nIGV2ZW50IHdpbGwgYmUgY29uZHVjdGVkIGluIGEgaHlicmlkIGZvcm1hdDoNCuKAoglWaXJ0dWFsOiBab29tDQrigKIJSW4tUGVyc29uOiBRQ0wgQ2xhc3Nyb29tDQoNClBhcnRpY2lwYW50czogIA0KN0MgU3R1ZGVudHMsIEZhY3VsdHkgYW5kIFN0YWZmICANCl9fXw0KDQojIyMjIE9uZSB3ZWVrIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3AgIDxhIG5hbWU9Ik9uZSB3ZWVrIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3AiPjwvYT4NCg0KX19Nb2RlcmF0b3JfXyA8YSBuYW1lPSJNb2RlcmF0b3IiPjwvYT4NCg0KKiBJZiB5b3UgYXJlIGluc3RydWN0aW5nIA0KICAgIC0gQXNrIGZvciB3aG9ldmVyIG1vZGVyYXRvciBhIHdlZWsgYmVmb3JlIG9yIGluc3RydWN0IGFuZCBtb2RlcmF0ZSB5b3Vyc2VsZi4NCg0KX19ab29tX18gPGEgbmFtZT0iWm9vbSI+PC9hPg0KDQpTdGVwIDE6IA0KDQoqIEdvIHRvIG1lZXRpbmdzICAgICAgDQohW0dvIHRvIG1lZXRpbmdzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUGljdHVyZTYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0U2TVNKMkYzQkZXQkhUTEs2WVIyVTI3USkgIA0KDQpTdGVwIDI6IA0KDQoqIENsaWNrIG9uIFNjaGVkdWxlICAgICAgDQohW0NsaWNrIG9uIFNjaGVkdWxlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUGljdHVyZTcucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VYRUo3WTVXUEYzT0pXU1NZWVIyVTZDUSkNCg0KU3RlcCAzOiANCg0KKiBHbyB0byBRQ0wgd29ya3Nob3AgIA0KIVtHbyB0byBRQ0wgd29ya3Nob3BdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9QaWN0dXJlOC5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRlhXM1pFUkFGM1ZSUEsyVFNZUjJVNkRRKQ0KDQpTdGVwIDQ6IA0KDQoqIExvb2sgZm9yIHdvcmtzaG9wIHlvdSBhcmUgd29ya2luZyAgICAgIA0KIVtMb29rIGZvciB3b3Jrc2hvcCB5b3UgYXJlIHdvcmtpbmddKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9QaWN0dXJlOS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVVFV0dZRFdZVUtSU1E0Mk9ZUjJVNkVBKQ0KDQpTdGVwIDU6IA0KDQoqIEZpbGwgaW4gbWVldGluZyBpbmZvcm1hdGlvbiBvbiBab29tIHRoZW4gY2xpY2sgc2F2ZSwgICANCiAgICAtIERlc2NyaXB0aW9uIChPcHRpb25hbCkgY29tZXMgZnJvbSBJbnN0cnVjdG9y4oCZcyBtZWV0aW5nICAgIA0KIVtGaWxsIGluIG1lZXRpbmcgaW5mb3JtYXRpb24gb24gWm9vbSB0aGVuIGNsaWNrIHNhdmUsIERlc2NyaXB0aW9uIChPcHRpb25hbCkgY29tZXMgZnJvbSBJbnN0cnVjdG9y4oCZcyBtZWV0aW5nXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUGljdHVyZTEwLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGVlVEWDRJWVE2RkRZVzI1NllSMlU2RlEpDQoNClN0ZXAgNjogDQoNCiogWW91IHdpbGwgc2VlIHRoaXMgICANCiFbWW91IHdpbGwgc2VlIHRoaXNdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9QaWN0dXJlMTEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZBRUpOMzIzWE4zQ1I2UUhZWVIyVTZHQSkNCg0KU3RlcCA3OiANCg0KKiBPbiBtZWV0aW5nIHRhYiwgaXQgc2hvdWxkIHRoZXJlICAgIA0KIVtPbiBtZWV0aW5nIHRhYiwgaXQgc2hvdWxkIHRoZXJlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUGljdHVyZTEyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFRkdBRkZLVEhXU1RUTkJST1lSMlU2R1EpDQoNCl9fTG9jYWxpc3RfXyA8YSBuYW1lPSJMb2NhbGlzdCI+PC9hPiAgIA0KDQpTdGVwIDE6CQ0KDQoqIFN0YXJ0IGJ5IGNvcHlpbmcgYW4gb2xkIGV2ZW50ICANCiAgICAtIE1ha2Ugc3VyZSB5b3UgYXJlIHdvcmtpbmcgb24gY29weSAgDQotIEZpbGwgaW4gYWxsIGluZm9ybWF0aW9uIChMaWtlIGJlbG93KSAgDQogICAgLSBDbGljayDigJxJbmNsdWRlIEFib3ZlIGluIFNjaGVkdWxl4oCdICANCiAgICAtIERlbGV0ZSB0aGUgb2xkIENvbmZpcm1lZCBkYXRlcyAgDQogICAgLSBEZXNjcmlwdGlvbiBpcyBtYWRlIGZyb20gSW5zdHJ1Y3RvcuKAmXMgbWVldGluZyAgDQohW1N0YXJ0IGJ5IGNvcHlpbmcgYW4gb2xkIGV2ZW50XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvTG9jYWxpc3QxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFWU9MUUVQUUtENlBONUpQVVlSMldJUEEpICANCg0KU3RlcCAyOg0KDQoqIEZpbGwgb3V0IExvY2F0aW9uIChMaWtlIGJlbG93KSAgDQogICAgLSBDaGVjayBpZiBldmVudCBpcyBvbmx5IGluLXBlcnNvbiwgb25seSB2aXJ0dWFsIG9yIGh5YnJpZCAgDQohW0ZpbGwgb3V0IExvY2F0aW9uIChMaWtlIGJlbG93KV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0xvY2FsaXN0Mi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRlhEREFVUjdOWVFYS1ZNSllZUjJXSVBRKQ0KDQpTdGVwIDM6CQ0KDQoqIENoYW5nZSB0aGUgT3duZXIgdG8geW91cnNlbGYgCSAgDQogICAgLSBDaGVjayBWYW5pdHkgVVJMIChxY2xfd29ya3Nob3Bfc3RhdGFfZmEyMV8xMTE3KSAgDQohW0NoYW5nZSB0aGUgT3duZXIgdG8geW91cnNlbGZdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9Mb2NhbGlzdDMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZEVUJCTTRDRzZHU0dHVDJJWVIyV0lRQSkNCg0KU3RlcCA0OgkNCg0KKiBBZGQgYSBUaWNrZXQgVHlwZXMgIA0KICAgIC0gVmlydHVhbCBvciBJbi1QZXJzb24gKG9yIGJvdGgpICANCiAgICAtIE1ha2Ugc3VyZSBWaXJ0dWFsIGlzIGFsd2F5cyBvbiBUb3AgIA0KIVtBZGQgYSBUaWNrZXQgVHlwZXNdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9Mb2NhbGlzdDQucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0Y3VjZBRUZJUDVSNFBYTkFJWVIyV0lRUSkNCg0KU3RlcCA1OgkNCg0KKiBBZGQgYSBWaXJ0dWFsIHRpY2tldCBuYW1lIGlzIFpPT00gYW5kIGRyYWcgdG8gdGhlIHJpZ2h0IHRpY2tldCB0eXBlIChwaWMgd3JvbmcpICANCiAgICAtIFRoZW4gZ28gaW50byBhZGRpdGlvbmFsIHRpY2tldCBvcHRpb25zICANCiFbQWRkIGEgVmlydHVhbCB0aWNrZXQgbmFtZSBpcyBaT09NIGFuZCBkcmFnIHRvIHRoZSByaWdodCB0aWNrZXQgdHlwZSAocGljIHdyb25nKV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0xvY2FsaXN0NS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRlZGTzZGUUdTQ0VURlVaRkVZUjJXSVJBKQ0KDQpTdGVwIDY6CQ0KDQoqIENoZWNrIHRvIG1ha2Ugc3VyZSBzZXR0aW5ncyBhcmUgY29ycmVjdCAgDQogICAgLSBNYWtlIHN1cmUgVGlja2V0IGF2YWlsYWJpbGl0eSBkYXRlcyBjb3JyZWN0bHkgZGF0ZWQgb3IgbGVmdCBibGFuayBpZiB5b3Ugd2lsbCBtYW51YWwgdHVybiBvZmYgIA0KIVtDaGVjayB0byBtYWtlIHN1cmUgc2V0dGluZ3MgYXJlIGNvcnJlY3RdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9Mb2NhbGlzdDYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZPWFo1NENYUUZJSFhCQVpXWVIyV0lSUSkNCg0KU3RlcCA3OgkNCg0KKiAgQWRkIGluLXBlcnNvbiB0aWNrZXQgbmFtZWQgUUNMIENMQVNTUk9PTSBhbmQgZHJhZyB0byB0aGUgcmlnaHQgdGlja2V0IHR5cGUgKHBpYyB3cm9uZykgIA0KICAgIC0gVGhlbiBnbyBpbnRvIGFkZGl0aW9uYWwgdGlja2V0IG9wdGlvbnMgIA0KIVtBZGQgaW4tcGVyc29uIHRpY2tldCBuYW1lZCBRQ0wgQ0xBU1NST09NIGFuZCBkcmFnIHRvIHRoZSByaWdodCB0aWNrZXQgdHlwZSAocGljIHdyb25nKV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0xvY2FsaXN0Ny5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkxLSFlEU01TRE5TTUVVV1NZUjJXSVNBKQ0KDQpTdGVwIDg6CQ0KDQoqIENoZWNrIHRvIG1ha2Ugc3VyZSBzZXR0aW5nIGFyZSBjb3JyZWN0ICANCiFbQ2hlY2sgdG8gbWFrZSBzdXJlIHNldHRpbmcgYXJlIGNvcnJlY3RdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9Mb2NhbGlzdDgucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZSVVE2SzI1TlA2TldIQUlTWVIyV0lTUSkNCg0KDQpTdGVwIDk6CQ0KDQoqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IEF0dGVuZGVlcyBRdWVzdGlvbnMgYXJlIGNvcnJlY3QgIA0KDQoxLgkiUGxlYXNlIGVudGVyIHlvdXIgc3R1ZGVudCBJRCAjIChNdXN0IGJlIDggY2hhcmFjdGVycykuIEZvciBhbGwgZmFjdWx0eS9zdGFmZi9ub24tQ2xhcmVtb250IENvbGxlZ2VzIHBlcnNvbiwgcGxlYXNlIGluc2VydCAwMDAwMDAwMC4iIChSZXF1aXJlZCkgIA0KMi4JIlBsZWFzZSBpbmRpY2F0ZSBnZW5kZXIgKG1hbGUgb3IgZmVtYWxlKSIgIA0KMy4JIldoaWNoIG9uZSBvZiB0aGUgQ2xhcmVtb250IENvbGxlZ2VzIGFyZSB5b3UgZnJvbT8iIChSZXF1aXJlZCkgIA0KNC4JIklmIG5vdCBmcm9tIHRoZSBDbGFyZW1vbnQgQ29sbGVnZXMsIHdoZXJlIGFyZSB5b3UgZnJvbT8iICANCjUuCSJBcmUgeW91IGEgRnJlc2htYW4sIFNvcGhvbW9yZSwgSnVuaW9yLCBTZW5pb3IsIEdyYWR1YXRlIFN0dWRlbnQsIEZhY3VsdHksIFN0YWZmIG9yIE90aGVyPyIgKFJlcXVpcmVkKSAgDQo2LgkiSWYgT3RoZXIsIHBsZWFzZSBzcGVjaWZ5OiIgICAgDQohW0NoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IEF0dGVuZGVlcyBRdWVzdGlvbnMgYXJlIGNvcnJlY3RdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9Mb2NhbGlzdDkucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZBRUI2WDJHWjI1T0VRRU5HWVIyV0lUQSkNCg0KU3RlcCAxMDoJDQoNCiogIENoZWNrIHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBFdmVudCBDYXBhY2l0eSAgDQohW0NoZWNrIHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBFdmVudCBDYXBhY2l0eV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0xjb2FsaXN0MTAucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZZNUozSE1LTEI3NzZJTFMyWVIyV0lWQSkNCg0KU3RlcCAxMToJDQoNCiogUHVibGlzaCBvciBOT1QgIA0KICAgIC0gTWFrZSBzdXJlIGlmIHlvdSBhcmUgcHVibGlzaGluZyB0aGF0IHRoZSBjaGVja21hcmsgaXMgY2hlY2tlZCAgIA0KICAgIC0gQnV0IGlmIHlvdSB3YW50IGFub3RoZXIgRmVsbG93IHRvIHJldmlldyB0aGVuIG1ha2Ugc3VyZSBwdWJsaXNoIGlzIG5vdCBjaGVja2VkICANCiAgICAtIFRoZW4gQ2xpY2sgU2F2ZSAgDQotIFRFU1QhIFRFU1QhIFRFU1QhICAgDQogICAgLSB3aGVuIHlvdSBzZXQgdXAgdGhlIHJlZ2lzdHJhdGlvbiBwYWdlcywgcGxlYXNlIHRlc3QgdGhlbSBieSByZWdpc3RlcmluZyBmb3IgdGhlIHdvcmtzaG9wcyBhbmQgc2VlICAgICAgIGlmIGV2ZXJ5dGhpbmcgd29ya3MgZmluZSBpbmNsdWRpbmcgdGhlIGVtYWlsIGNvbmZpcm1hdGlvbiwgWm9vbSBsaW5rcywgZXRjLiAgIA0KLSAgU2VuZCBEci4gUGFyayBhbiBlbWFpbCArIHBvc3QgYSBtZXNzYWdlIG9uIFRlYW1zIHNvIHRoYXQgSSBjYW4gYW5ub3VuY2UgdGhlbS4gIA0KIVtQdWJsaXNoIG9yIE5PVF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0xvY2FsaXN0MTEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZPVVRWUkFUUkpDSEZSVEU2WVIyV0lXQSkNCg0KDQojIyMjIFR3byBkYXlzIGJlZm9yZSBkYXkgb2Ygd29ya3Nob3AgPGEgbmFtZT0iVHdvIGRheXMgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcCI+PC9hPg0KX0Nsb3NlIFJlZ2lzdHJhdGlvbiBmb3Igd29ya3Nob3BfICANCg0KU3RlcCAxOiAgDQoNCiogRm9yIHRob3NlIHRoYXQgZG8gbm90IHJlcXVpcmUgZXh0ZW5zaXZlIHByaW9yIHByZXAsIGxldOKAmXMgY2xvc2UgdGhlbSA1IHBtIGEgZGF5IGJlZm9yZS4gQW5kLCAgICAgMiBkYXlzIHByaW9yIGZvciB0aG9zZSB0aGF0IHJlcXVpcmUgcmVxdWVzdGluZyBsaWNlbnNlcyAgICANCiAgICAtIEdvIGludG8gZXZlbnQgICAgIA0KICAgIC0gR28gaW50byB0aWNrZXRzICAgICANCiAgICAtIENsaWNrIGluYWN0aXZhdGUgb24gYW55IHRpY2tldHMgdGhhdCBhcmUgYWN0aXZlICAgIA0KIVtGb3IgdGhvc2UgdGhhdCBkbyBub3QgcmVxdWlyZSBleHRlbnNpdmUgcHJpb3IgcHJlcF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1R3b2RheXMxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFUFdBQTZOWTRPWkE3UUpPRVlSMzNCQVEpICANCg0KU3RlcCAyOiAgDQoNCiogWW91IHNob3VsZCBzZWUgdGhlIHRpY2tldCBzdGF0dXMgYXMgaW5hY3RpdmF0ZSAgICAgDQohW1lvdSBzaG91bGQgc2VlIHRoZSB0aWNrZXQgc3RhdHVzIGFzIGluYWN0aXZhdGUgIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1R3b2RheXMyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFT0RSM1BRN1VYNU1DWExGR1lSMzNCQlEpICANCg0KIyMjIyBEYXkgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcCA8YSBuYW1lPSJEYXkgYmVmb3JlIGRheSBvZiB3b3Jrc2hvcCI+PC9hPg0KDQpfX1F1YWx0cmljc19fIDxhIG5hbWU9IlF1YWx0cmljcyI+PC9hPg0KDQpTdGVwIDE6IA0KDQoqCU1ha2Ugc3VyZSB0byBtYWtlIGEgU2lnbiBhbmQgRXhpdCBvbmUgIA0KICAgIC0JTWFrZSBjb3B5IG9mIG9sZCBvbmUgICANCiAgICAgIC0JU2lnbiBpbiBmb3Igc2lnbiBpbiAoRmFsbF8yMDIxX1NpZ25pbl9TdXJ2ZXlfU1FMX0x2bDFfVmFuZXNzYV9DYXNpbGxhc18xMTE5KSAgDQogICAgICAtCUV4aXQgZm9yIEV4aXQgKEZhbGxfMjAyMV9FeGl0X1N1cnZleV9TUUxfTHZsMV9WYW5lc3NhX0Nhc2lsbGFzXzExMTkpICANCiFbTWFrZSBzdXJlIHRvIG1ha2UgYSBTaWduIGFuZCBFeGl0IG9uZSAgXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbHRyaWNzMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUxHWkpHT1JBWVFNWFVKUk9ZUjMzQ1pRKSAgDQoNClN0ZXAgMjogIA0KDQoqIENoYW5nZSBuYW1lIHRvIHdvcmtzaG9wIG5hbWUgYW5kIGluc3RydWN0b3IgIA0KIVtDaGFuZ2UgbmFtZSB0byB3b3Jrc2hvcCBuYW1lIGFuZCBpbnN0cnVjdG9yICBdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsdHJpY3MyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUDI2TURSWUJUUEMzMlFJQVlSMzNDMkEpICANCg0KU3RlcCAzOiAgDQoNCiogQ2hhbmdlIHdvcmtzaG9wIHNpZ24taW4gZm9yIGFuZCBEYXRlL1RpbWUgIA0KICAgIC0gU2lnbi1pbiAgDQohW0NoYW5nZSB3b3Jrc2hvcCBzaWduLWluIGZvciBhbmQgRGF0ZS9UaW1lIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VFVkVPRFhWR1NXQlZTMjVFWVIzM0MyUSkgIA0KDQpTdGVwIDQ6ICANCg0KKiBDaGFuZ2Ugd29ya2Zsb3cgbGluayAgDQogICAgLSBJbiBlbWFpbCB0byB0aGUgd2VpcmQgY29kZSAgDQogICAgLSBNYWtlIHN1cmUgRHIuIFBhcmsgaXMgZ2V0dGluZyBhbiBlbWFpbCBzZW50IHRvIGhpbSAgDQohW0NoYW5nZSB3b3JrZmxvdyBsaW5rIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczQucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZON0tBUTJVR0VYT1lZR0JRWVIzM0MzQSkgDQohW0luIGVtYWlsIHRvIHRoZSB3ZWlyZCBjb2RlIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczUucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZLMldYN1BCVFhJUlpNRDJDWVIzM0MzUSkgICAgDQohW01ha2Ugc3VyZSBEci4gUGFyayBpcyBnZXR0aW5nIGFuIGVtYWlsIHNlbnQgdG8gaGltIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VBVlc3TlNWQjVHVTJQVjZLWVIzM0M0USkgIA0KDQpTdGVwIDU6ICANCg0KKiBFeGl0ICAgDQohW0V4aXRdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsdHJpY3M3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGSFA1QkpJQVlENklVRFZCU1lSMzNDNUEpICANCg0KU3RlcCA2OiAgDQoNCiogQ2hhbmdlIHdvcmtmbG93IGxpbmsgIA0KICAgIC0gTWFrZSBzdXJlIERyLiBQYXJrIGlzIGdldHRpbmcgYW4gZW1haWwgc2VudCB0byBoaW0gIA0KIVtDaGFuZ2Ugd29ya2Zsb3cgbGlua10oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczgucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZYUjVDUElKTE1RTlBNR0FVWVIzM0M2QSkgDQohW01ha2Ugc3VyZSBEci4gUGFyayBpcyBnZXR0aW5nIGFuIGVtYWlsIHNlbnQgdG8gaGltIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczkucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0U2V0pXR01KQ1ZPTk9CQjIyWVIzM0M3QSkgIA0KDQpTdGVwIDc6IA0KDQoqIENsaWNrIFB1Ymxpc2ggIA0KIVtDbGljayBQdWJsaXNoIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczEwLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSFdNWVhaQVEzTEFVTkY2NFlSMzNDN1EpICANCg0KU3RlcCA4OiAgDQoNCioJQ29weSBsaW5rIHRvIHVzZSBmb3IgQml0Lmx5IGxhdGVyIGFuZCBoaXQgcHVibGlzaCAgDQogICAgICAtIElmIHlvdSBmb3JnZXQgdG8gZ2V0IGhlcmUsIHlvdSBjYW4gc3RpbGwgZ2V0IGl0IHdoZW4geW91IG1ha2UgUVIgY29kZSAgDQohW0NvcHkgbGluayB0byB1c2UgZm9yIEJpdC5seSBsYXRlciBhbmQgaGl0IHB1Ymxpc2ggIF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1F1YWx0cmljczExLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGWjU3SklZUzNVT1YyRFdCR1lSMzNEQUEpICANCg0KU3RlcCA5OiAgDQoNCioJQmFyY29kZSBmb3IgV29yZCBkb2MgICANCiAgICAtCUFub255bW91cyBsaW5rIHdpbGwgZ2l2ZSB5b3UgdGhlIGxpbmsgb2YgdGhlIHN1cnZleSBhZ2FpbiB0byBwdXQgaW50byBCaXQubHkgIA0KICAgIC0JRG93bmxvYWQgUVIgY29kZSBmb3Igd29yZCBkb2MgdXNlICANCiFbQmFyY29kZSBmb3IgV29yZCBkb2NdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsdHJpY3MxMi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRTJJTkVDQ0paUU5KTk5VQk9ZUjMzREJBKSAgDQoNCl9fQml0Lmx5X18gPGEgbmFtZT0iQml0Lmx5Ij48L2E+DQoNCiFbQml0Lmx5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvQml0bHkxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFVlVUSU5KM1dOREhHRVQ2Q1lSMzRTSkEpICANCg0KU3RlcCAxOg0KDQoqCUNvcHkgYW5kIHBhc3RlIHRoZSBzaG9ydGVuIGxpbmsgaW50byB3b3JkIGRvYw0KIVtDb3B5IGFuZCBwYXN0ZSB0aGUgc2hvcnRlbiBsaW5rIGludG8gd29yZCBkb2NdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9CaXRseTIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0Y2QVRSRk9HQ0c0TzZRNUdZWVIzNFNKUSkgIA0KDQpTdGVwIDI6DQoNCioJT25jZSB5b3UgY3JlYXRlIGEgcmVnaXN0cmF0aW9uIGZvcm0gb24gbG9jYWxpc3QsIHdvdWxkIHlvdSBwbGVhc2UgY3JlYXRlIGJpdC5seSBzaG9ydCBjdXQgYW5kIGxldCBtZSBrbm93PyBEbyB5b3Uga25vdyBob3cgdG8gY3JlYXRlIGEgYml0Lmx5IFVSTCBzaG9ydGN1dD8NCiAgICAtCWNyZWF0ZWQgc2hvcnRjdXRzIHdpdGggc29tZSBuYW1pbmcgY29udmVudGlvbiBzaGUgbWFkZSBmb3IgaGVyc2VsZi4NCiAgICAgICAgLQllLmcuLCBodHRwOi8vYml0Lmx5L3N1MjAyMS0wNS1leGNlbC1MMi1yZWcgDQogICAgICAgIC0JZS5nLiwgaHR0cHM6Ly9iaXQubHkvZmEyMDIxLWV4Y2VsLTEwMjANCg0KX19GbHllciBXb3JkIGRvY19fIDxhIG5hbWU9IkZseWVyIFdvcmQgZG9jIj48L2E+DQoNCioJQ2hhbmdlIHRvIGZpdCB3b3Jrc2hvcA0KICAgIC0JVGl0bGUNCiAgICAtCURhdGUgJiBUaW1lDQogICAgLQlJbnN0cnVjdG9yDQogICAgLQlRUiBDb2RlIGZyb20gUXVhbHRyaWNzDQogICAgLQlTaG9ydGVuIGxpbmsgZnJvbSBCaXQubHkgIA0KIVtDaGFuZ2UgdG8gZml0IHdvcmtzaG9wXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvRmx5ZXIxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFRVZSSTUzNElQWE1JUEtaUVlSMzRUUFEpICANCg0KX19FbWFpbHMgKHRvIGJlIHdyaXR0ZW4pX18gPGEgbmFtZT0iRW1haWxzICh0byBiZSB3cml0dGVuKSI+PC9hPg0KDQoNCl9fUmVtaW5kZXIgRW1haWxfXyA8YSBuYW1lPSJSZW1pbmRlciBFbWFpbCI+PC9hPg0KDQoqCVNlbmQgb3V0IGEgcmVtaW5kZXIgZW1haWwuIA0KICAtCUFkZA0KICAgIC0JVmlydHVhbCBXb3JrIGluZm86IFpvb20gaW52aXRhdGlvbiBsaW5rIChqdXN0IGluIGNhc2UpDQogICAgLQlJbi1QZXJzb24gSW5mbzoNCiAgICAtCUFueXRoaW5nIGluc3RydWN0b3Igd2FudHMgdG8gcmVsYXkgDQotCUV4YW1wbGUgMSAgDQohW0V4YW1wbGUgMV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlbWluZGVyMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUZWNzVRS1BHRENENkU0NFdZUjM0VUNBKSAgDQoNCi0JRXhhbXBsZSAyICANCiFbRXhhbXBsZSAyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVtaW5kZXIyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGQ1RMS1pTQkE1NlQzVFlPRVlSMzRVREEpICANCg0KDQotIEV4YW1wbGUgMyAgDQohW0V4YW1wbGUgM10oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlbWluZGVyMy5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRTdZQzU1N1RGVElXNkgzWUVZUjM0VUVBKSAgDQoNCi0gRXhhbXBsZSA0ICANCg0KRGVhciBNQVRMQUIgKExldmVsIDEg4oCTIENvZGluZytDb21wdXRpbmcpIEF0dGVuZGVlczogIA0KIA0KVGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBmb3IgdGhlIE1BVExBQiAoTGV2ZWwgMSDigJMgQ29kaW5nK0NvbXB1dGluZykgV29ya3Nob3AuDQoNCkdldHRpbmcgRXF1aXBwZWQgd2l0aCBNQVRMQUIgKExldmVsIDEg4oCTIENvZGluZytDb21wdXRpbmcpICANCg0KSW5zdHJ1Y3RvcjogQmhhdmVuIE1pc3RyeSAoQXNzaXN0YW50IERpcmVjdG9yIG9mIHRoZSBRQ0wpDQoNClN1bW1hcnk6ICAgIA0KV2FudCB0byBsZWFybiB0byBwcm9ncmFtLCBidXQgZG9u4oCZdCBrbm93IHdoZXJlIHRvIHN0YXJ0IG9yIHdoYXQgdG8gaW5zdGFsbD8gTUFUTEFCIGlzIGEgbnVtZXJpY2FsIGNvbXB1dGluZyBsYW5ndWFnZSBhbmQgZW52aXJvbm1lbnQgdGhhdCBpcyBzdXJwcmlzaW5nbHkgZWFzeSB0byB1c2UuIFR5cGljYWxseSB1c2VkIGJ5IGVuZ2luZWVycyBhbmQgc2NpZW50aXN0cywgeW91IGNhbiB0aGluayBvZiBpdCBhcyBhIHZlcnkgcG93ZXJmdWwsIGN1c3RvbWl6YWJsZSBjYWxjdWxhdG9yLiBCdXQsIGludGVyZXN0aW5nbHksIGl04oCZcyB0aGlzIHZlcnkgY2hhcmFjdGVyaXN0aWMgdGhhdCBtYWtlcyBNQVRMQUIgYW4gaWRlYWwgbGFuZ3VhZ2UgZm9yIHByb2dyYW1taW5nIGJlZ2lubmVycywgZXZlbiBpZiB5b3XigJlyZSBub3QgbWF0aGVtYXRpY2FsbHkgaW5jbGluZWQuDQpJbiB0aGlzIHdvcmtzaG9wLCB3ZSB3aWxsIHN0ZXAgeW91IHRocm91Z2ggdGhlIGJhc2ljcyBvZiBwcm9ncmFtbWluZyB1c2luZyB0aGUgTUFUTEFCIGNvZGluZyBlbnZpcm9ubWVudC4gV2Ugd2lsbCBzdGFydCBieSBnZXR0aW5nIGZhbWlsaWFyIHdpdGggdGhlIHNvZnR3YXJlLCBsZWFybmluZyB0aGUgYmFzaWNzIG9mIHZhcmlhYmxlIGFzc2lnbm1lbnQgYW5kIG1hbmlwdWxhdGlvbiwgd3JpdGluZyBvdXIgb3duIGZ1bmN0aW9ucywgYW5kIGV4cGxvcmluZyBzb21lIGFwcGxpY2F0aW9ucy4gSWYgeW914oCZcmUgY29tcGxldGVseSBuZXcgdG8gcHJvZ3JhbW1pbmcsIGxlYXJuaW5nIHRoZSBmdW5kYW1lbnRhbHMgd2l0aCBNQVRMQUIgZmlyc3QgaXMgYSBncmVhdCB3YXkgdG8gc3ByaW5nYm9hcmQgaW50byBvdGhlciBsYW5ndWFnZXMuIEFsdGVybmF0aXZlbHksIGlmIHlvdSBoYXZlIHNvbWUgZXhwZXJpZW5jZSB3aXRoIHByb2dyYW1taW5nLCBidXQgaGF2ZSBhbHdheXMgd2FudGVkIHRvIGxlYXJuIHdoYXQgTUFUTEFCIGlzIHVzZWQgZm9yLCB0aGlzIGNvdWxkIGJlIGEgZ29vZCB3YXkgdG8gZ2V0IHlvdXIgZmVldCB3ZXQuDQoNClByZS1yZXF1aXNpdGVzOiAgDQpJbnRlcm5ldCBVc2U6IEludHJvZHVjdG9yeSBsZXZlbCAoc2VhcmNoLCBsb2ctaW4sIG5hdmlnYXRpb24gb2Ygd2Vic2l0ZXMsIGV0Yy4pDQpTb2Z0d2FyZTogQXR0ZW5kZWVzIGFyZSBhc2tlZCB0byBoYXZlIE1BVExBQiBvbiB0aGVpciBjb21wdXRlcnMgZm9yIHRoZSB3b3Jrc2hvcC4gTUFUTEFCIGlzIGF2YWlsYWJsZSBmb3IgQ01DIHN0dWRlbnRzIGFuZCBmYWN1bHR5IGF0IGh0dHBzOi8vd3d3LmNtYy5lZHUvaW5mb3JtYXRpb24tdGVjaG5vbG9neS9hY2FkZW1pYy1zb2Z0d2FyZQ0KDQpMb2NhdGlvbjogIA0KT25saW5lIChBdHRlbmRlZXMgd2lsbCByZWNlaXZlIHRoZSBab29tIG1lZXRpbmcgaW5mb3JtYXRpb24gYWZ0ZXIgcmVnaXN0cmF0aW9uKQ0KDQpQYXJ0aWNpcGFudHM6ICANCg0KT3BlbiB0byBhbGwgQ01DIFN0dWRlbnRzLCBGYWN1bHR5IGFuZCBTdGFmZg0KDQpJIGFtIGF0dGFjaGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHdvcmtzaG9wIGJlbG93OiAgIA0KUUNMIFdvcmtzaG9wIGlzIGludml0aW5nIHlvdSB0byBhIHNjaGVkdWxlZCBab29tIG1lZXRpbmcuDQoNClRvcGljOiBbUUNMIFdvcmtzaG9wXSBHZXQgRXF1aXBwZWQgd2l0aCBNQVRMQUINCg0KVGltZTogU2VwIDI5LCAyMDIxIDAzOjAwIFBNIFBhY2lmaWMgVGltZSAoVVMgYW5kIENhbmFkYSkNCg0KSm9pbiBab29tIE1lZXRpbmcNCg0KaHR0cHM6Ly9jbWMtaXRzLnpvb20udXMvai84Mzc3MzU0NzYxMD9wd2Q9WTJsb2EzVm9XblF2V0ZReFVEZzFWMHhJYkhCTmR6MDkNCg0KTWVldGluZyBJRDogODM3IDczNTQgNzYxMA0KDQpQYXNzY29kZTogd29ya3Nob3AhDQoNClJlcXVpcmVkIFNvZnR3YXJlL0FjY291bnQgDQoNCmh0dHBzOi8vd3d3LmNtYy5lZHUvaW5mb3JtYXRpb24tdGVjaG5vbG9neS9hY2FkZW1pYy1zb2Z0d2FyZQ0KDQpMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLiANCiANCkJlc3QgcmVnYXJkcywgICANClZhbmVzc2EgQ2FzaWxsYXMgICANClFDTCBHcmFkdWF0ZSBGZWxsb3cgICANCg0KX19BdHRlbmRlZXMgRW1haWxzX18gPGEgbmFtZT0iQXR0ZW5kZWVzIEVtYWlscyI+PC9hPg0KDQoqCUdvIHRvIExvY2FsaXN0IGFuZCBjbGljayBvbiBldmVudCAgDQohW0dvIHRvIExvY2FsaXN0IGFuZCBjbGljayBvbiBldmVudF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL0F0dGVuZGVlczEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZZSE9YTVlaVFpZTFNINTNNWVIzNFdJUSkgIA0KDQoqCUNsaWNrIG9uIFZpZXcgQ29uZmlybWVkIFRpY2tldHMgIA0KIVtDbGljayBvbiBWaWV3IENvbmZpcm1lZCBUaWNrZXRzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvQXR0ZW5kZWVzMi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVU0V0lMQlZZREMyTVNWSkVZUjM0V0pBKSAgDQoNCioJQ2xpY2sgRXhwb3J0IENTViAgDQohW0NsaWNrIEV4cG9ydCBDU1ZdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9BdHRlbmRlZXMzLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSkhBN0E0QUlXM1laSDJYS1lSMzRXSkEpICANCg0KKglHbyB0byBlbWFpbCBhbmQgZG93bmxvYWQgdGhlIENTViAgDQohW0dvIHRvIGVtYWlsIGFuZCBkb3dubG9hZCB0aGUgQ1NWXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvQXR0ZW5kZWVzNC5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUtHUTVSWUxMRFgzV0JMR0FZUjM0V0pRKSAgDQoNCioJT3BlbiBDU1YgYW5kIGNvcHkgZW1haWxzIGludG8geW91ciByZW1pbmRlciBlbWFpbCAgDQohW09wZW4gQ1NWIGFuZCBjb3B5IGVtYWlscyBpbnRvIHlvdXIgcmVtaW5kZXIgZW1haWxdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9BdHRlbmRlZXM1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUjdDNFdSVjdGWFpTNVhaU1lSMzRXS1EpICANCg0KIyMjIyBEYXkgb2Ygd29ya3Nob3AgPGEgbmFtZT0iRGF5IG9mIHdvcmtzaG9wIj48L2E+DQoNCl9fTW9kZXJhdG9yIGNoZWNrbGlzdF9fIDxhIG5hbWU9Ik1vZGVyYXRvciBjaGVja2xpc3QiPjwvYT4NCg0KKglNb3JuaW5nIG9mDQogICAgLQlQYXN0ZSBab29tIGluZm8gaW4gUUNMIFdvcmtzaG9wIOKAkyBXb3Jrc2hvcCBDb250cm9sIEJvb3RoIGNoYXQgaW4gVGVhbXMgDQogICAgLQlTZW5kIG91dCByZW1pbmRlcnMgaWYgeW91IGhhdmVu4oCZdCBhbHJlYWR5DQotCVNob3cgdXAgMzAgbWludXRlcyBiZWZvcmUgd29ya3Nob3ANCiAgICAtCVByaW50IG91dCBmbHllcnMNCiAgICAgICAgLQlQdXQgb24gdGFibGVzIHdoZXJlIHRoZSBhdHRlbmRlZXMgd2lsbCBzaXQNCiAgICAtCUxvZyBpbnRvIFpvb20gKHdvcmtzaG9wcykNCiAgICAgICAgLQlTdGFydCAzMCBtaW51dGVzIGJlZm9yZQ0KICAgICAgICAtCUNoZWNrIGF1ZGlvIGFuZCB2aWRlbw0KICAgICAgICAtCU1ha2UgSW5zdHJ1Y3RvciBjby1ob3N0DQogICAgICAgIC0JVGVzdCBydW5zIHdpdGggaW5zdHJ1Y3Rvcg0KICAgIC0JR2V0IHNob3J0ZW4gbGlua3MgZnJvbSBiaXQubHkgcmVhZHkNCiAgICAtCVNldC11cCBjYW1lcmENCiAgICAtCVB1dCB0aGUgc3BvdGxpZ2h0IG9uIHdvcmtzaG9wIHZpZGVvIGZlZWQNCiAgICAtCU1ha2Ugc3VyZSB0aGUgaW5zdHJ1Y3RvciBpcyBzY3JlZW5zaGFyaW5nDQotCVRpbWUgb2YgdGhlIHdvcmtzaG9wDQogICAgLQlXZWxjb21lIGV2ZXJ5b25lOiAoY2hhbmdlIHdoZW4gbmVjZXNzYXJ5IGZvciBvbmx5IHZpcnR1YWwgb3Igb25seSBpbiBwZXJzb24gd29ya3Nob3BzKQ0KICAgICAgICAtCVdlbGNvbWUgdG8gdGhlIFFDTCEgVG9kYXnigJlzIHdvcmtzaG9wIGlzIChuYW1lIG9mIGV2ZW50KSBpbnN0cnVjdGVkIGJ5IChuYW1lIG9mICAgICAgICAgICAgICAgaW5zdHJ1Y3Rvci4gTXkgbmFtZSBpcyAoeW91ciBuYW1lKSBhbmQgSSAoYXMgd2VsbCBhcyAob3RoZXIgbW9kZXJhdG9yKSkgd2lsbCB5b3VyICAgICAgICAgICAgICBtb2RlcmF0b3JzIGZvciB0b2RheeKAmXMgd29ya3Nob3AuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMgdGhyb3VnaG91dCB0aGUgICAgICAgICAgc2Vzc2lvbiwgcGxlYXNlIHdyaXRlIGluIGNoYXQgZm9yIG91ciB2aXJ0dWFsIGF0dGVuZGVlcyBvciByYWlzZSBvciBoYXZlIGZvciBvdXIgICAgICAgICAgICAgICBpbi1wZXJzb24gYXR0ZW5kZWVzLiBCZWZvcmUgd2Ugc3RhcnQsIHBsZWFzZSBtYWtlIHN1cmUgdG8gc2lnbiBpbiB3aXRoIGVpdGhlciB0aGUgUVIgICAgICAgICAgIGNvZGUgb3IgdGhlIGxpbmsgcHJvdmlkZWQuIExhc3RseSwgdGhpcyB3b3Jrc2hvcCB3aWxsIGJlIHJlY29yZGVkLiBFbmpveSENCiAgICAgICAgLQlMaW5rIHNpZ24taW4gc3VydmV5IGluIGNoYXQgYW5kIGxpbmtzIGZvciB3b3Jrc2hvcCBmcm9tIGluc3RydWN0b3IgDQpXZWxjb21lISBQbGVhc2Ugc2lnbi1pbjogaHR0cHM6Ly9iaXQubHkvM3pETnpQaiANCkxpbmsgZnJvbSBpbnN0cnVjdG9yOiBodHRwczovL2dpdGh1Yi5jb20vQ01DLVFDTC9FeGNlbC1MMi1Xb3Jrc2hvcA0KSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb25jZXJucyB0aHJvdWdob3V0IHRoZSBzZXNzaW9uLCBwbGVhc2Ugd3JpdGUgaW4gY2hhdCBAZXZlcnlvbmUuDQpUaGFuayB5b3UhIFBsZWFzZSBzaWduLW91dDogaHR0cHM6Ly9iaXQubHkvM0VJT2dkWCANCiAgICAtCUNsaWNrIFJlY29yZA0KICAgICAgICAtIE5vdGU6IGlmIG9uIGJyZWFrLCBjbGljayBwYXVzZSBub3Qgc3RvcCwgd2Ugd2FudCB0aGUgbGVhc3QgbnVtYmVyIG9mIGZpbGVzIG1hZGUNCiAgICAtCUNoZWNrIGluIGF0dGVuZGVlcyB3aG8gYXR0ZW5kIG9uIExvY2FsaXN0DQogICAgICAgIC0JQ3Jvc3MgY2hlY2sgb3ZlciBRdWFsdHJpY3MgdG8gbWFrZSBzdXJlIHRoYXQgYXR0ZW5kZWVzIHRha2Ugc3VydmV5IGFzIHdlbGwNCiAgICAtCUludGVycnVwdCB0aGUgaW5zdHJ1Y3RvciBpZiBhbiBhdHRlbmRlZSBvbmxpbmUgaGFzIGEgcXVlc3Rpb24gb3IgaWYgdGhlIGF0dGVuZGVlICAgICAgICAgICAgICAgaW4tcGVyc29uIGhhcyBub3QgYmVlbiBzZWVuIHJhaXNpbmcgdGhlaXIgaGFuZC4NCi0JRW5kIG9mIHdvcmtzaG9wDQogICAgLQlMaW5rIEV4aXQgc3VydmV5IGluIGNoYXQNCiAgICAtCVRoYW5rIGV2ZXJ5b25lIGZvciBjb21pbmcNCiAgICAtCUNsZWFuIHVwIGFuZCBiYWNrIHVwDQotCVNlbmQgZW1haWwgcmVtaW5kZXIgaWYgdGhlcmUgaXMgYSBsb3cgcmF0ZSBmb3Igc3VydmV5cyANCi0JU2VuZCB6b29tIG1lZXRpbmcgcmVjb3JkaW5ncyB0byBhdHRlbmRlZXMgdGhhdCBhdHRlbmRlZA0KICAgIC0JTm90ZTogYWZ0ZXIgZXZlcnkgc2VtZXN0ZXIgd2UgZHVtcCByZWNvcmRpbmdzIGludG8gYSBib3ggZmlsZSwgYmVmb3JlIENNQyBkb2VzIGl0DQoNCiMjIyMgRGF5IGFmdGVyIHdvcmtzaG9wIDxhIG5hbWU9IkRheSBhZnRlciB3b3Jrc2hvcCI+PC9hPg0KDQpfX1F1YWx0cmljc19fIDxhIG5hbWU9IlF1YWx0cmljcyI+PC9hPg0KDQoqCUdpdmUg4oCcQ29sbGFib3JhdGXigJ0gdG8gaW5zdHJ1Y3RvciBvbiBzdXJ2ZXlzDQoNCl9fWm9vbSBSZWNvcmRpbmdzX18gPGEgbmFtZT0iWm9vbSBSZWNvcmRpbmdzIj48L2E+DQoNCioJT25seSBwcm92aWRlZCB0byB0aGUgYXR0ZW5kZWVzIHRoYXQgc2hvd2VkIHVwIGZvciB0aGUgd29ya3Nob3ANCioJUmVjb3JkcyBhcmUgcmVhZHkgdG8gc2VuZCB0aGUgbmV4dCBkYXkgYWZ0ZXIgdGhlIHdvcmtzaG9wDQohW09wZW4gQ1NWIGFuZCBjb3B5IGVtYWlscyBpbnRvIHlvdXIgcmVtaW5kZXIgZW1haWxdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9ab29tMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRk5FUFdNTUNYVkZaWkNLVEFZUjM0WkVBKSAgDQoNCl9fRW5kaW5nIGVtYWlsIGV4YW1wbGVfXyA8YSBuYW1lPSJFbmRpbmcgZW1haWwgZXhhbXBsZSI+PC9hPg0KDQpTdWJqZWN0OiBUaGFuayB5b3UgZm9yIGF0dGVuZGluZyB0aGUgKG5hbWUgb2Ygd29ya3Nob3ApIFdvcmtzaG9wDQoNCkhlbGxvIChuYW1lIG9mIHdvcmtzaG9wKSBhdHRlbmRlZXMsDQoNClRoYW5rIHlvdSBmb3IgYXR0ZW5kaW5nIHRoZSB3b3Jrc2hvcC4gDQoNCkkgaGF2ZSBwcm92aWRlZCB0aGUgbGlua3MgZm9yIHNpZ24taW4gYW5kIHNpZ24tb3V0Og0KDQpTaWduLWluOg0KKExpbmsgb2Ygc3VydmV5KSANCg0KU2lnbi1vdXQ6DQooTGluayBvZiBzdXJ2ZXkpDQoNClBsZWFzZSBtYWtlIHN1cmUgdG8gY29tcGxldGUgdGhlIHN1cnZleXMsIHRoZXkgY291bnQgYXMgeW91ciBhdHRlbmRhbmNlLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGVtLCB0aGFuayB5b3UuDQoNCihhbGwgcGFzdGVkIGZyb20gem9vbSkNCg0KTm90ZTogcmVjb3JkcyBhcmUgb25seSBwcm92aWRlZCBpZiB5b3UgYXR0ZW5kIHRoZSB3b3Jrc2hvcCANCg0KTGFzdGx5LCBpZiB0aGVyZSB3YXMgYW55IGhvbWV3b3JrIGFzc2lnbmVkIGZvciB0aGlzIHdvcmtzaG9wLCBwbGVhc2Ugc2VuZCBhbGwgZG9jdW1lbnRzIHRvOiBxY2xAY21jLmVkdSBmb3IgZ3JhZGluZy4NCg0KVGhhbmsgeW91LCANCih5b3VyIG5hbWUpDQpRQ0wgR3JhZHVhdGUgRmVsbG93DQoNCiMjIyMgV29ya3Nob3AgSXNzdWVzIDxhIG5hbWU9IldvcmtzaG9wIElzc3VlcyI+PC9hPg0KDQpfX05ldyBhdHRlbmRlZXMgYWZ0ZXIgY2xvc2VkIHJlZ2lzdHJhdGlvbl9fDQoNCioJRW1haWwgdG8gc3R1ZGVudCBmb3IgaW5mb3JtYXRpb246IChEbyBub3QgdG8gYXNrIGZvciBwZW9wbGXigJlzIGdlbmRlciBmb3IgdGhlIG5ldyBhdHRlbmRlZeKAmXMgZW1haWxzIGFzIGl0IGlzIG9wdGlvbmFsIG9uIG91ciBmb3JtLikNCg0KU3ViamVjdDogW1FDTF0gT25saW5lIFdvcmtzaG9wIG9uIG5hbWUgKGRhdGUgYXQgdGltZSkgYW5kIG5hbWUgKGRhdGUgYXQgdGltZSkgIA0KW0JjYydkIGV2ZXJ5b25lIGVsc2UgZXhjZXB0IFFDTCBGZWxsb3dzXQ0KDQpIaSAobmFtZSBvZiBuZXcgYXR0ZW5kZWUpLA0KIA0KV291bGQgeW91IGxpa2UgdG8gcmVnaXN0ZXIgZm9yIGJvdGggRXhjZWwgMSBhbmQgRXhjZWwgMiBzZXNzaW9ucz8NCiANCkFsc28sIGFyZSB5b3UgYWJsZSB0byBwcm92aWRlIG1lIGZvbGxvd2luZyBpbmZvcm1hdGlvbj8gIA0KMS4gICAgICBQbGVhc2UgZW50ZXIgeW91ciBzdHVkZW50IElEICMgKE11c3QgYmUgOCBjaGFyYWN0ZXJzKS4gRm9yIGFsbCBmYWN1bHR5L3N0YWZmL25vbi1DbGFyZW1vbnQgQ29sbGVnZXMgcGVyc29uLCBwbGVhc2UgaW5zZXJ0IDAwMDAwMDAwLiAgDQoyLiAgICAgIEdlbmRlciAgDQozLiAgICAgIEFyZSB5b3UgYSBGcmVzaG1hbiwgU29waG9tb3JlLCBKdW5pb3IsIFNlbmlvciwgR3JhZHVhdGUgU3R1ZGVudCwgRmFjdWx0eSwgU3RhZmYgb3IgT3RoZXI/ICANCg0KUGxlYXNlIG5vdGUgdGhhdCB3ZSB1c3VhbGx5IGNsb3NlIHJlZ2lzdHJhdGlvbiAxIHRvIDMgZGF5cyBwcmlvciAoZGVwZW5kaW5nIG9uIHRoZSBwcmVwYXJhdGlvbiBuZWVkZWQgdG8gc2V0IHVwIGEgd29ya2luZyBlbnZpcm9ubWVudCkgdG8gd29ya3Nob3AgZXZlbnRzLg0KIA0KQmVzdCByZWdhcmRzLCAgDQpRQ0wgR3JhZHVhdGUgRmVsbG93IChwdXQgeW91ciBuYW1lIGhlcmUpICANCg0KKiBJc3N1ZSBUaWNrZXQgdGFiIG9uIENvbmZpcm1lZCBUaWNrZXRzIHBhZ2UNCiFbSXNzdWUgVGlja2V0IHRhYiBvbiBDb25maXJtZWQgVGlja2V0cyBwYWdlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvSXNzdWVzMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRldDSlRKUENPT1ZaQjZCTUNZUjM2NjJBKSAgDQoNCioJRmlsbCBpbiBhbGwgaW5mbw0KIVtGaWxsIGluIGFsbCBpbmZvXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvSXNzdWVzMi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkdOWFIySzNZUDRNUEFVS0lZUjM2NjJRKSAgDQoNCioJQWZ0ZXIgZmlsbGluZyBvdXQgdGhlIGZvcm0sIHRoZSBhdHRlbmRlZSB3aWxsIGdldCBhbiBlbWFpbCBmcm9tIExvY2FsaXN0DQogICAgLQlTZW5kIG91dCBhbiBlbWFpbCBmb2xsb3cgdXAgdG8gdGhlIG5ldyBhdHRlbmRlZQ0KICAgIA0KU3ViamVjdDogW1FDTCBXb3Jrc2hvcF0gTmFtZSBvZiB3b3Jrc2hvcCDigJMgQXZhaWxhYmlsaXR5DQoNCkhpIChuYW1lIG9mIG5ldyBhdHRlbmRlZSksDQoNCkkgaGF2ZSBpbnB1dCB5b3VyIGluZm9ybWF0aW9uIGludG8gTG9jYWxpc3QgZm9yIHRoZSAobmFtZSBvZiB3b3Jrc2hvcCkgd29ya3Nob3AuDQoNCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIExvY2FsaXN0IHRpY2tldCBieSBub3cuDQoNClBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLg0KDQpCZXN0IHJlZ2FyZHMsIA0KUUNMIEdyYWR1YXRlIEZlbGxvdyAocHV0IHlvdXIgbmFtZSBoZXJlKSANCg0KKglJZiB5b3UganVzdCBpbnB1dCwgdGhlIG5ldyBhdHRlbmRlZSB3aXRob3V0IGluZm9ybWF0aW9uLCBzZW5kIHRoaXMgZW1haWwNCg0KU3ViamVjdDogW1FDTCBXb3Jrc2hvcF0gTmFtZSBvZiB3b3Jrc2hvcCDigJMgQXZhaWxhYmlsaXR5DQoNCkhpIChuYW1lIG9mIG5ldyBhdHRlbmRlZSksDQoNCkkganVzdCByZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSBKYW5uYSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHJlZ2lzdGVyIGZvciB0aGUgKG5hbWUgb2Ygd29ya3Nob3ApIHdvcmtzaG9wLg0KDQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBMb2NhbGlzdCB0aWNrZXQgYnkgbm93Lg0KDQpQbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucy4NCg0KQmVzdCByZWdhcmRzLCANClFDTCBHcmFkdWF0ZSBGZWxsb3cgKHB1dCB5b3VyIG5hbWUgaGVyZSkgDQogDQoqCU5vdGU6IFdlIHR5cGljYWxseSBoYXZlIDE1IHNlYXRzIGJ1dCB3YWl0IGxpc3QgaXMgNQ0KDQpfX0NoZWNrIGF0dGVuZGVl4oCZcyBlbWFpbHNfXw0KDQoqCUZpeCBlbWFpbHMsIHNvbWV0aW1lcyB0aGV5IG1pc3NwZWxsIHRoZWlyIGVtYWlscw0KDQojIyMjIGUuIEJ1eWluZyBhIHRpY2tldCDigJMgTWFraW5nIHN1cmUgaXQgd29ya3MgPGEgbmFtZT0iQnV5aW5nIGEgdGlja2V0IOKAkyBNYWtpbmcgc3VyZSBpdCB3b3JrcyI+PC9hPg0KcGljMw0KIVtwaWMzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvYnV5aW5nMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUFGSlhJR0NFRzVHNkdKMllZUjM3QTNBKSAgDQpwaWM0DQohW3BpYzRdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9idXlpbmcyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSjZJUFozSTMzRkZMS0tLV1lSMzdBNEEpICANCnBpYzUNCiFbcGljNV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL2J1eWluZzMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZOQ1JSTUhZWUlHNlhNNjNTWVIzN0E0USkgIA0KcGljNg0KIVtwaWM2XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvYnV5aW5nNC5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRlIzSlI0T0pYSVlSUU9ISE9ZUjM3QTRRKSAgDQpwaWM3DQohW3BpYzddKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9idXlpbmc1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGRkNZUjM3TEpHRzVLUFU3NllSMzdBNVEpICANCnBpYzgNCiFbcGljOF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL2J1eWluZzYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZDM1RXNDVRVFQyNFM3SUVNWVIzN0E2QSkgIA0KcGljOQ0KIVtwaWM5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvYnV5aW5nNy5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkpZQ0VaUlRYT0JLS1NYV1dZUjM3QTdBKQ0KIA0KIyMjIyBmLiBDaGFuZ2luZyBXZWJzaXRlIDxhIG5hbWU9IkNoYW5naW5nIFdlYnNpdGUiPjwvYT4NCg0KcGljMTANCiFbcGljMTBdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy93ZWJzaXRlMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRjQyNERNTzZXWUVVQTZMNFNZUjM3RExRKQ0KcGljMTENCiFbcGljMTFdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy93ZWJzaXRlMi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkRCRlhXSzZESFBKTFIyQjRZUjM3RE1RKQ0KcGljMTINCiFbcGljMTJdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy93ZWJzaXRlMy5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkhITlBXVFBDRUNYQVpYUENZUjM3RE5RKQ0KcGljMTMNCiFbcGljMTNdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy93ZWJzaXRlNC5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVBTM0JGUDZHSUQyTVVCUVNZUjM3RE9BKQ0KDQojIyMjIGcuIENoZWNrbGlzdCBmb3IgYSBUeXBpY2FsIFdvcmtkYXkgPGEgbmFtZT0iQ2hlY2tsaXN0IGZvciBhIFR5cGljYWwgV29ya2RheSI+PC9hPg0KDQpUaGlzIGlzIGlmIHRoZXJlIGlzIG5vIHdvcmtzaG9wIG9yIGFwcG9pbnRtZW50IGdvaW5nIG9uDQoNCioJQ2hlY2sgZW1haWwNCiAgICAtCVdyaXRlIGJhY2sgdG8gYW55b25lDQogICAgLQlTZW5kIGFueSBlbWFpbHMgdGhhdCBoYXZlIGJlZW4gb24gVE9ETyBsaXN0DQogICAgLQlPcmdhbml6ZSB5b3VyIGVtYWlscyBpbiB0aGVpciByZXNwZWN0aXZlIGZvbGRlcnMNCiFbT3JnYW5pemUgeW91ciBlbWFpbHMgaW4gdGhlaXIgcmVzcGVjdGl2ZSBmb2xkZXJzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvQ2hlY2tsaXN0MS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVdGWUZYT0dOWk9JUlFDRDJZUjM3RVZBKQ0KLQlVcGRhdGUgUUNMIHdlYnNpdGUNCi0JRGF5IGFmdGVyIHdvcmtzaG9wDQogICAgLQlTZW5kIG91dCBlbWFpbCBvZiBjbG9zaW5nIHdvcmtzaG9wDQogICAgICAgIC0JUmVjb3JkaW5nLCBzdXJ2ZXkgbGlua3MsIHRoYW5rIHlvdQ0KLQlUd28gd2Vla3MgcHJpb3Igd29yawkNCiAgICAtCUNoZWNrIHdoYXQgaXMgY29taW5nIGluIHR3byB3ZWVrcw0KICAgICAgICAtCVNldCBhcHBvaW50bWVudHMgdG8gbWVldCB3aXRoIGluc3RydWN0b3JzDQogICAgICAgICAgICAtCUdldCBzdW1tYXJpZXMNCiAgICAgICAgICAgIC0JVG9vbHMNCiAgICAgICAgICAgIC0JUG9pbnQgcG9pbnRzDQogICAgICAgICAgICAtCWZpbGVzDQogICAgICAgICAgICAtCUxpY2Vuc2VzDQotCU9uZSB3ZWVrIGJlZm9yZSB3b3JrDQogICAgLQlMb2NhbGlzdCBhbmQgem9vbQ0KICAgIC0JTGV0IERyLiBQYXJrIGtub3cgdGhleSBhcmUgcmVhZHkgdG8gYmUgYW5ub3VuY2VkIA0KLQlUd28gZGF5cyBiZWZvcmUgd29yaw0KICAgIC0JU2VuZCBvdXQgcmVtaW5kZXIgZW1haWxzIHRvIGxvY2FsaXN0IGF0dGVuZGVlcyBmb3IgdXBjb21pbmcgd29ya3Nob3ANCi0JR2V0IGxpY2Vuc2VzIGluZm9ybWF0aW9uIG91dA0KICAgIC0JQ2xvc2Ugb2xkIFF1YWx0cmljcyBzdXJ2ZXlzDQogICAgLQlNYWtlIG5ldyBRdWFsdHJpY3Mgc3VydmV5cyBmb3IgdXBjb21pbmcgd29ya3Nob3BzDQogICAgLQlNYWtlIFFSIGNvZGVzL0JpdC5seSBmb3IgdXBjb21pbmcgd29ya3Nob3ANCglPdGhlciB3b3JrDQoJICAtCUdyYXBoaWMgRGVzaWduDQotCU1ha2Ugd29ya3Nob3BzDQogICAgLQlTUUwNCiAgICAtCUVYQ0VMDQogICAgLQlHSVMNCi0JV29ya2RheQ0KICAgIC0JUHV0IGluIHNjaGVkdWxlDQogICAgDQojIyMjIGguIEJ1aWxkaW5nIGEgV29ya3Nob3AgPGEgbmFtZT0iQnVpbGRpbmcgYSBXb3Jrc2hvcCI+PC9hPg0KDQpfX0dpdGh1Yl9fIDxhIG5hbWU9IkdpdGh1YiI+PC9hPg0KDQohW3BpYzE1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvQnVpbGRpbmcxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFRk9UT1lEM0ZUVVFBWDJUVVlSMzdGU0EpDQoNCioJRmlsZXMgbmVlZGVkIGluIEdpdGh1Yg0KICAgIC0JUHJlLXdvcmtzaG9wIHJlcXVpcmVtZW50cw0KICAgIC0JUHJlc2VudGF0aW9uIHBkZg0KICAgIC0JRmlsZXMgZm9yIGhhbmQtb24gYWN0aXZpdGllcw0KICAgIC0JUkVBRE1FLm1kIA0KICAgICAgICAtCUEgc3VtbWFyeSBvZiB0aGUgd29ya3Nob3AgZm9yIGxvY2FsaXN0IGFuZCB6b29tDQoNCiFbQSBzdW1tYXJ5IG9mIHRoZSB3b3Jrc2hvcCBmb3IgbG9jYWxpc3QgYW5kIHpvb21dKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9CdWlsZGluZzIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZHRTdMU05XVFU1SEtJTTM2WVIzN0ZTUSkNCg0KX19QcmUtd29ya3Nob3AgcmVxdWlyZW1lbnRzIFBERl9fIDxhIG5hbWU9IlByZS13b3Jrc2hvcCByZXF1aXJlbWVudHMgUERGIj48L2E+DQoNCioJTWFrZSBpbiBwcm9ncmFtIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSAoaS5lLiwgUG93ZXJwb2ludCwgQXJjR2lzIFN0b3JpZXMpDQotCU1ha2UgaXQgaW50byBhIFBERiB0byBzZW5kIGJlZm9yZSB3b3Jrc2hvcA0KLQlEb3dubG9hZGluZyBzb2Z0d2FyZSBIb3cgdG8gZm9yIE1hYyBhbmQgV2luZG93cw0KLQlMaWNlbnNlIGluZm9ybWF0aW9uDQotCUV4cGxhaW4gd2hhdCB0byBicmluZyB0byB3b3Jrc2hvcA0KDQpfX1ByZXNlbnRhdGlvbiBQREZfXyA8YSBuYW1lPSJQcmVzZW50YXRpb24gUERGIj48L2E+DQoqCU1ha2UgaW4gcHJvZ3JhbSB5b3Ugd291bGQgbGlrZSB0byB1c2UgKGkuZS4sIFBvd2VycG9pbnQsIEFyY0dpcyBTdG9yaWVzKQ0KLQlNYWtlIGl0IGludG8gYSBQREYgdG8gc2VuZCBhZnRlciB3b3Jrc2hvcA0KLQlCZWdpbm5lcnPigJkgbWF0ZXJpYWwgZm9yIExldmVsIDENCi0JUmVxdWlyZWQgU2xpZGVzIChtYWtlIHN1cmUgdG8gZG8gdGhlIG1hdGVyaWFsIGluIGNodWNrcykNCiAgICAtCVRpdGxlIHBhZ2UNCiAgICAtCUJlZm9yZSB3ZSBzdGFydA0KICAgIC0JRG93bmxvYWQgSW5mb3JtYXRpb24gDQogICAgLQlBZ2VuZGENCiAgICAtCU92ZXJ2aWV3DQogICAgLQlWb2NhYnVsYXJ5DQogICAgLQlUb2RheeKAmXMgRGF0YQ0KICAgIC0JRGVtbyBBZ2VuZGENCiAgICAtCURlbW8gU2xpZGVzDQogICAgLQlBY3Rpdml0eQ0KICAgIC0JUXVlc3Rpb25zDQogICAgLQlBbnN3ZXJzDQogICAgLQlSZXNvdXJjZXMNCiAgICAtCUNvbnRhY3QgaW5mbw0KDQpfX0ZpbGVzX18gPGEgbmFtZT0iRmlsZXMiPjwvYT4NCg0KKglEYXRhIGZpbGVzIHRvIGltcG9ydCANCiAgICAtCUhhbmQtb24gYWN0aXZpdGllcyANCi0JT3RoZXIgZmlsZXMgb2YgaW50ZXJlc3QNCg0KIyMjIyBpLiBXb3Jrc2hvcHMgQnVpbGRpbmcgPGEgbmFtZT0iV29ya3Nob3BzIEJ1aWxkaW5nIj48L2E+DQoNCioJSW4gdGhlIHBhc3QsIHRoZSB3YXkgd2Ugb2ZmZXIgb3VyIHdvcmtzaG9wIHRvIHNwZWNpZmljIGluc3RpdHV0ZSBsaWtlIExvd2Ugd2FzIHRoYXQgd2UgKENpbmR5KSB3b3JrZWQgd2l0aCB0aGVpciBhZG1pbiBvciBzdHVkZW50IGxlYWRlciB0byBmaW5kIGdvb2QgdGltZXMgZm9yIHRoZWlyIGZlbGxvd3MgYW5kIFJBcyBhbmQgb2ZmZXIgYSBzZXBhcmF0ZSB3b3Jrc2hvcChzKSBmb3IgdGhlbS4gSSBhbSB0aGlua2luZyB3ZSB3b3VsZCB3YW50IHRvIG9mZmVyIHRoZW0gYSBzZXBhcmF0ZSBHSVMgd29ya3Nob3AocykuDQoNCldobyBhc2tlZCBmb3IgUUNMIHRyYWluaW5nczogDQogDQpicm9va2UuYmVybmFsQGNsYXJlbW9udG1ja2VubmEuZWR1IChSb3NlIEluc3RpdHV0ZSkgIA0KYnJpdHRhbnkuYnJhc0BjbGFyZW1vbnRtY2tlbm5hLmVkdSAoUm9zZSBJbnN0aXR1dGUpICANCktyaXN0aW4uTWlsbGVyQENsYXJlbW9udE1jS2VubmEuZWR1IChSb2JlcnRzIEVudmlyb25tZW50IENlbnRlcikgIA0KbnBhdGVsMjFAc3R1ZGVudHMuY2xhcmVtb250bWNrZW5uYS5lZHUgKFN0dWRlbnQgTWFuYWdlciBSb3NlIEluc3RpdHV0ZSkgIA0KamVubmlmZXIuZmVpdG9zYUBjbGFyZW1vbnRtY2tlbm5hLmVkdSAoUHN5Y2hvbG9neSwgYXNrZWQgZm9yIFNQU1MgYW5kIEV4Y2VsKSAgDQogDQogDQpXaG8geW91IGNhbiBhc2sgZm9yIFFDTCB3b3Jrc2hvcHM6DQogDQpKZWFuaW5lIEZpbm4gamVhbmluZS5maW5uQGNsYXJlbW9udC5lZHUgKFVuaXggU2hlbGwgYW5kIEdpdCkgIA0KQnJhbmRvbiBCYWsgYnJhbmRvbmJha0BnbWFpbC5jb20gKEFsdGVyeXgpICANCkNpbmR5IENoZW5nIGNpbmR5LmNoZW5nQGNndS5lZHUgKFBvd2VyIEJJKSAgDQpBbGZvbnNvIExhbmRlcm9zIGFsYW5kZXJvc0B1Y2xhLmVkdSAoSnVsaWEpICANCkFhc2hpdGEgS2VzYXJ3YW5pIGFrZXNhcndhbmlAaG1jLmVkdSAoTUwpICANCkJyYWQgTWNDYXVsZXkgYm1jY2F1bGV5QGhtYy5lZHUgKGJhc2ggc2NyaXB0KSAgDQogDQpTUUwgZGF0YXNldCB1c2VkIGZvciBGYWxsIDIwMjAgYXR0YWNoZWQuIA0KDQojIyMjIGouIFpvb20gUmVjb3JkaW5nIERvd25sb2FkcyA8YSBuYW1lPSJab29tIFJlY29yZGluZyBEb3dubG9hZHMiPjwvYT4NCg0KV2UgYXJlIHJlYWNoaW5nIG91dCB0b2RheSB3aXRoIGEgZnJpZW5kbHkgYW5kIGltcG9ydGFudCByZW1pbmRlciB0byBwbGVhc2UgdHJhbnNmZXIgb3IgZGVsZXRlIHlvdXIgb2xkZXIgWm9vbSBjbG91ZCByZWNvcmRpbmdzIHdpdGhpbiB5b3VyIFpvb20gYWNjb3VudCB0byBoZWxwIGVuc3VyZSB0aGF0IHdlIGNhbiBjb250aW51ZSB0byBwcm92aWRlIHRoaXMgc2VydmljZSB0byBvdXIgZmFjdWx0eSBhbmQgc3RhZmYgd2l0aG91dCBhY2NydWluZyBhZGRpdGlvbmFsIHN0b3JhZ2UgZXhwZW5zZXMuDQoNCk91ciBab29tIGNsb3VkIHJlY29yZGluZyBzdG9yYWdlIGN1cnJlbnRseSBoYXMgYSBzaGFyZWQgcXVvdGEgb2YgMSB0ZXJhYnl0ZSBmb3IgYWxsIHVzZXJzIGFuZCBhYm91dCAxIGdpZ2FieXRlIG9mIHN0b3JhZ2UgcGVyIGluZGl2aWR1YWwgdXNlci4gSG93ZXZlciwgd2Ugbm93IGhhdmUgc2V2ZXJhbCBab29tIGFjY291bnRzIHRoYXQgYXJlIHdheSBvdmVyIHRoZSAxIGdpZ2FieXRlIHN0b3JhZ2UgYWxsb3RtZW50LiBUbyBjb2xsZWN0aXZlbHkgaGVscCBzYXZlIHNwYWNlLCB3ZSByZWNvbW1lbmQgdGhhdCBhbGwgdXNlcnMgZG93bmxvYWQgdGhlaXIgWm9vbSByZWNvcmRpbmdzIGFuZCBzdG9yZSB0aGVtIGluIGFuIGFsdGVybmF0ZSBsb2NhdGlvbiwgc3VjaCBhcyBCb3ggd2hlcmUgbXVjaCBtb3JlIHN0b3JhZ2Ugc3BhY2UgaXMgYXZhaWxhYmxlLiBPbmNlIHlvdeKAmXZlIHN0b3JlZCB0aGUgcmVjb3JkaW5ncyBpbiBhbiBhbHRlcm5hdGUgbG9jYXRpb24sIHBsZWFzZSBtYWtlIHN1cmUgdG8gZ28gYmFjayBhbmQgZGVsZXRlIHRoZSByZWNvcmRpbmdzIGZyb20geW91ciBab29tIGNsb3VkIHN0b3JhZ2UuDQoNCkFjdGlvbiBOZWVkZWQ6DQoNCioJSWYgeW91IHVzZSBab29tIGNsb3VkIHJlY29yZGluZyDigJMgcGxlYXNlIGZvbGxvdyB0aGUgYmVsb3cgaW5zdHJ1Y3Rpb25zIGZvciBvZmZsb2FkaW5nIHlvdXIgcmVjb3JkaW5ncyBhbmQgdGhlbiBkZWxldGUgdGhlbSBvZmYgWm9vbSBvbmNlIHRyYW5zZmVycmVkDQoNCl9Ib3cgdG8gRG93bmxvYWQgWW91ciBab29tIENsb3VkIFJlY29yZGluZ3M6Xw0KDQoxLiBMb2dpbiB0byB0aGUgWm9vbS51cyB3ZWIgcG9ydGFsIChodHRwczovL3pvb20udXMpIA0KDQoyLiBJbiB0aGUgbGVmdC1oYW5kIG5hdmlnYXRpb24gbWVudSwgY2xpY2sgUmVjb3JkaW5ncyAoZGlyZWN0IGxpbms6IGh0dHBzOi8vem9vbS51cy9yZWNvcmRpbmcpDQoNCjMuIENsaWNrIE1vcmUgbmV4dCB0byBhIG1lZXRpbmcgcmVjb3JkaW5nIGFuZCBjbGljayBEb3dubG9hZA0KDQohW0NsaWNrIE1vcmUgbmV4dCB0byBhIG1lZXRpbmcgcmVjb3JkaW5nIGFuZCBjbGljayBEb3dubG9hZF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlY29yZGluZzEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0U2Mk1QWFdMTzdSQVZYTFQyWVIzN0c3USkNCg0KNC4gQ2xpY2sgRG93bmxvYWQgb24gdGhlIHBvcC11cCB0aGF0IGFwcGVhcnMNCg0KIVtDbGljayBEb3dubG9hZCBvbiB0aGUgcG9wLXVwIHRoYXQgYXBwZWFyc10oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlY29yZGluZzIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VER0ZEWk1FSUtQN0hNRzdTWVIzN0hCQSkNCg0KNS4gQ2xpY2sgQWxsb3cgaWYgcHJvbXB0ZWQgZm9yIHBlcm1pc3Npb24gdG8gRG93bmxvYWQgbXVsdGlwbGUgZmlsZXMuDQoNCiFbQ2xpY2sgQWxsb3cgaWYgcHJvbXB0ZWQgZm9yIHBlcm1pc3Npb24gdG8gRG93bmxvYWQgbXVsdGlwbGUgZmlsZXMuXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVjb3JkaW5nMy5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUZSNlc2Sk1ZRjRMQVAyNjJZUjM3SENBKQ0KDQo2LiBDaGVjayB5b3VyIERvd25sb2FkcyBmb2xkZXIgZm9yIHlvdXIgcmVjb3JkaW5nIGZpbGVzICgubTRhIGZvciBhdWRpbyBhbmQgLm1wNCBmb3IgdmlkZW8pDQoNCk9uY2UgZG93bmxvYWRlZCwgeW91IGNhbiB1cGxvYWQgeW91ciBmaWxlcyB0byB5b3VyIEJveCBhY2NvdW50IChodHRwczovL2NsYXJlbW9udG1ja2VubmEuYm94LmNvbSkuIEJveCBoYXMgYSB2ZXJ5IGxhcmdlIHN0b3JhZ2UgY2FwYWNpdHkgcGVyIHVzZXIgYW5kIGNhbiBiZSBpbmNyZWFzZWQgd2hlbiBuZWNlc3NhcnkuDQoNCk9uY2UgeW91ciBmaWxlcyBhcmUgb24gQm94IG9yIHN0b3JlZCBzb21ld2hlcmUgc2FmZSBvZmYgWm9vbSwgeW91IGNhbiBzaGFyZSB5b3VyIGZpbGVzIHdpdGggb3RoZXJzIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgb3V0bGluZWQgaW4gdGhlIGF0dGFjaGVkIFBERiBndWlkZSBjYWxsZWQg4oCcU2hhcmluZyBGaWxlcyBpbiBCb3jigJ0uDQoNCkFsdGVybmF0aXZlbHksIGlmIHlvdeKAmWQgbGlrZSB0byB1c2UgbG9jYWwgcmVjb3JkaW5nIGluc3RlYWQgd2l0aCBab29tLCB3ZSBoYXZlIGF0dGFjaGVkIGd1aWRlcyBmb3IgdGhpcyBhcyB3ZWxsLiAgSG93ZXZlciwgd2Ugb25seSByZWNvbW1lbmQgdGhpcyBmb3Igbm9uLWNyaXRpY2FsIGV2ZW50cyBhbmQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZSBjbGFzc3Jvb20gc2V0dGluZy4NCg0KcGljMjANCiFbcGljMjBdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9SZWNvcmRpbmc0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGRkJSTlpDRTczWU5RRFFBMllSMzdKRVEpDQpwaWMyMQ0KIVtwaWMyMV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlY29yZGluZzUucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZGWTRaQ1lYS0ZYN1FFTlpVWVIzN0pFUSkNCnBpYzIyDQohW3BpYzIyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVjb3JkaW5nNi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkk2TkZUNzROTVJLSkQ2MkNZUjM3SkZBKQ0KcGljMjMNCiFbcGljMjNdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9SZWNvcmRpbmc3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSFBEQ1JUT1JUMlhXREVGR1lSMzdKR0EpDQpwaWMyNA0KIVtwaWMyNF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1JlY29yZGluZzgucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0U3VDJSTFQ2M0dVWDIyQUdNWVIzN0pHUSkNCnBpYzI1DQohW3BpYzI1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVjb3JkaW5nOS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRTY0MkNYS0JMU0ZTTlhDTDRZUjM3SkhBKQ0KcGljMjYNCiFbcGljMjZdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9SZWNvcmRpbmcxMC5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRUpUNVFPQlRJQ09BUzJJUkFZUjM3SklBKQ0KcGljMjcNCiFbcGljMjddKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9SZWNvcmRpbmcxMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRlFVNkhSNkVHVVZOT0dNVkNZUjM3SklRKQ0KDQojIyMjIGsuIFF1YWx0cmljcyBNYWtlIGEgV29ya2Zsb3cgPGEgbmFtZT0iUXVhbHRyaWNzIE1ha2UgYSBXb3JrZmxvdyI+PC9hPg0KDQoqCVNpZ24taW4gU3VydmV5DQoNCnF1YWwxDQohW3F1YWwxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZBVkpZRE5TR0JTTUNTNllJWVIzN1JLQSkNCnF1YWwyDQohW3F1YWwyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZHREtWNFZZTVZSMlNNNVk2WVIzN1JNQSkNCnF1YWwzDQohW3F1YWwzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0U2STZMV09STUFXTjJHSldPWVIzN1JOQSkNCnF1YWw0DQohW3F1YWw0XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDQucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZINlMyWU1LTUQ3UjdURTZDWVIzN1JOUSkNCnF1YWw1DQohW3F1YWw1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDUucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VPU0ZaV0Q3SE40N1JPUjNTWVIzN1JPQSkNCnF1YWw2DQohW3F1YWw2XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VDWVVKQTJEVkNRREdUTDYyWVIzN1JPUSkNCnF1YWw3DQohW3F1YWw3XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDcucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VOWlBFWFpRNlJHWEFLU09LWVIzN1JSQSkNCnF1YWw4DQohW3F1YWw4XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDgucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VHSFJUSEJXSFlDS0NTTTNTWVIzN1NUUSkNCnF1YWw5DQohW3F1YWw5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDkucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZMNkxLVDRUSTNET1JYUTNDWVIzN1NVQSkNCnF1YWwxMA0KIVtxdWFsMTBdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTAucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VYNllRUEdFTEJCV0Q3UjJRWVIzN1NWUSkNCnF1YWwxMQ0KIVtxdWFsMTFdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZHUEozWlJaWTZEMzVEM0c0WVIzN1NXQSkNCnF1YWwxMg0KIVtxdWFsMTJdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZRSVpLTFYzWUY2QjJSU0lVWVIzN1NXUSkNCnF1YWwxMw0KIVtxdWFsMTNdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VKREo1SDZOQVdXSkpDRkk0WVIzN1RSUSkNCnF1YWwxNA0KIVtxdWFsMTRdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTQucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VUV1JKSVQzN1lMTUI3RlFPWVIzN1RTQSkNCnF1YWwxNQ0KIVtxdWFsMTVdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTUucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZPQVlPUUw3Wkw1VVdJNkNLWVIzN1RTUSkNCnF1YWwxNg0KIVtxdWFsMTZdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9RdWFsMTYucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZTNFlGUk5HNURDV0VDRk9BWVIzN1RVUSkNCg0KKiBFeGl0IFN1cnZleQ0KDQpxdWFsMTcNCiFbcXVhbDE3XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDE3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFUklGVEEyQlBPNEFCWFZaUVlSMzdVSlEpDQpxdWFsMTgNCiFbcXVhbDE4XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDE4LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGNUNMQjZMWk5IWjRZWFpHWVlSMzdVS0EpDQpxdWFsMTkNCiFbcXVhbDE5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDE5LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGTDRFNks3RlJDTzVYUDRQQ1lSMzdVS1EpDQpxdWFsMjANCiFbcXVhbDIwXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDIwLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGM0tCTjZIWlhWUkFSTTY0SVlSMzdVTEEpDQpxdWFsMjENCiFbcXVhbDIxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDIxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSERNRjdZNko0R0JLTzRRUVlSMzdVTUEpDQpxdWFsMjINCiFbcXVhbDIyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDIyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGTFdBTUhST1ZQNllGWUlNUVlSMzdVTUEpDQpxdWFsMjMNCiFbcXVhbDIzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDIzLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFVlE0REtLWkJVVURWRVhZMllSMzdXWVEpDQpxdWFsMjQNCiFbcXVhbDI0XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDI0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGNU5KSUFNQTdORkFMSEpRQVlSMzdXWkEpDQpxdWFsMjUNCiFbcXVhbDI1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDI1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFWllBT1ZLWlQ2RFZLV1VPT1lSMzdXWlEpDQpxdWFsMjYNCiFbcXVhbDI2XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDI2LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGNTJZQVdXRVVDMjNaQjVXV1lSMzdXMkEpDQpxdWFsMjcNCiFbcXVhbDI3XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDI3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFQjdFT0pLUU41STYyUFpUU1lSMzdXMlEpDQpxdWFsMjgNCiFbcXVhbDI4XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUXVhbDI4LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGSzdaSEZNUEFPS1hJQUEyRVlSMzdXM0EpDQoNCl9fXw0KDQojIyMjIGwuIEhvdyB0byBzY2hlZHVsZSBtZWV0aW5ncyBvbiBab29tIDxhIG5hbWU9IkhvdyB0byBzY2hlZHVsZSBtZWV0aW5ncyBvbiBab29tIj48L2E+DQoNCm1lZXRpbmcxDQohW21lZXRpbmcxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvbWVldGluZzEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0UyNEw2Uk1GU040RzdBVU9PWVIzN1lJQSkNCg0KbWVldGluZzINCiFbbWVldGluZzJdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9tZWV0aW5nMi5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRVZWWk9DSjRITlBLTTdIV01ZUjM3WUpBKQ0KDQoqKioNCg0KIyMjIDEyLiAgUUNMIEltcGFjdCBSZXBvcnQgIDxhIG5hbWU9IlFDTCBJbXBhY3QgUmVwb3J0Ij48L2E+DQppbXBhY3QxDQohW2ltcGFjdDFdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9JbXBhY3QxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFVkVVM0c1M1FRM0JaUVhRUVlSMzdZNUEpDQoNCl9fXw0KDQojIyMjIGEuIFF1YWx0cmljcyDigJMgUmVwb3J0cyAgPGEgbmFtZT0iUXVhbHRyaWNzIOKAkyBSZXBvcnRzIj48L2E+DQpSZXBvcnRzUTENCiFbUmVwb3J0c1ExXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3ExLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSzZEVklGSlNSQUlMQk9BTVlSMzc1NkEpDQpSZXBvcnRzUTINCiFbUmVwb3J0c1EyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3EyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFUUlNUVhXUzRTVk5CUjNZTVlSMzc1NlEpDQpSZXBvcnRzUTMNCiFbUmVwb3J0c1EzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3EzLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFTE9DWUMyQ0JBUVlMR1BCNllSMzc1NlEpDQpSZXBvcnRzUTQNCiFbUmVwb3J0c1E0XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUVlBTzRSVVQ1VFJRQkNJUVlSMzc1N0EpDQpSZXBvcnRzUTUNCiFbUmVwb3J0c1E1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUFBUSE1ORkxDMlZCSlpLUVlSMzc1N1EpDQpSZXBvcnRzUTYNCiFbUmVwb3J0c1E2XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E2LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFTDI0RlBTSE5XNEZZSUtJVVlSMzc2QUEpDQpSZXBvcnRzUTcNCiFbUmVwb3J0c1E3XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFNUZOM05KRllDQ0ZTVTJPWVlSMzc2QVEpDQpSZXBvcnRzUTgNCiFbUmVwb3J0c1E4XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E4LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUkdHVkJDUTdMV0VORzRQUVlSMzc2QkEpDQpSZXBvcnRzUTkNCiFbUmVwb3J0c1E5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c3E5LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGVk80UDdBRFVIQjZRV0dFMllSMzc2QlEpDQoNCiMjIyMgYi4gTG9jYWxpc3Qg4oCTIFJlcG9ydHMgIDxhIG5hbWU9IkxvY2FsaXN0IOKAkyBSZXBvcnRzIj48L2E+DQpSZXBvcnRzTDENCiFbUmVwb3J0c0wxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2wxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFMlhZQUxWSEhQSDZRNkhRR1lSMzc3WVEpDQpSZXBvcnRzTDINCiFbUmVwb3J0c0wyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2wyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGRU1ITkpQSFY2QVEzSE5MNllSMzc3WkEpDQpSZXBvcnRzTDMNCiFbUmVwb3J0c0wzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2wzLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFWkIyU0lVTElEUkxKV1pFT1lSMzc3WlEpDQpSZXBvcnRzTDQNCiFbUmVwb3J0c0w0XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2w0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFSkJEU003NkJUQ0g1Vkk2U1lSMzc3MkEpDQpSZXBvcnRzTDUNCiFbUmVwb3J0c0w1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2w1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGT09FSFlNS1VDUFFJRVUzWVlSMzc3MlEpDQpSZXBvcnRzTDYNCiFbUmVwb3J0c0w2XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2w2LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGS1NWWFo3NldaQTZZWjdTU1lSMzc3M0EpDQpSZXBvcnRzTDcNCiFbUmVwb3J0c0w3XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2w3LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGVkxBNE5ZM1FGU0U2Rk1KMllSMzc3M1EpDQpSZXBvcnRzTDgNCiFbUmVwb3J0c0w4XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUmVwb3J0c2w4LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFMkE2M1BESUpJWFRFNVJGQ1lSMzc3NEEpDQoNCiMjIyMgYy4gU3VtbWFyaWVzICA8YSBuYW1lPSJTdW1tYXJpZXMiPjwvYT4NCnN1bW1hcmllczENCiFbc3VtbWFyaWVzMV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1N1bW1hcmllczEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VWTVhHRUUzSVlXRFdCQjVZWVI0QUJOQSkNCg0KX19NaXNzaW5nIERhdGFfXyAgPGEgbmFtZT0iTWlzc2luZyBEYXRhIj48L2E+DQptaXNzaW5nMQ0KIVttaXNzaW5nMV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL01pc3NpbmcxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGQk1aWEw2QUVTNlhZRTdYV1lSNEFCMkEpDQoNCl9fTG9jYWxpc3RfXyAgPGEgbmFtZT0iTG9jYWxpc3QiPjwvYT4NClN1bUwxDQohW1N1bUwxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvU3VtbDEucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0Y2VFM0Rk01QTdKNVlUTVBJWVI0QUNBUSkNCg0KKglOZWVkIHRvIGdldCBFdmVudCBOYW1lIGFuZCBFdmVudCBJRCBmcm9tIHNpdGUgYW5kIG1hbnVhbGx5IGlucHV0IGl0IGluDQpzdW1MMg0KIVtzdW1MMl0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1N1bWwyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFS0ZLNlBQUEMyVTRRSEZDMllSNEFDQkEpDQoNCl9fUXVhbHRyaWNzX18gIDxhIG5hbWU9IlF1YWx0cmljcyI+PC9hPg0Kc3VtUTENCiFbc3VtUTFdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DTUMtUUNML2ZlbGxvdy1oYW5kYm9vay9tYWluL0ltYWdlcy9TdW1xMS5wbmc/dG9rZW49R0hTQVQwQUFBQUFBQlFIWVpTRkxBNlA0N1VMVENSRFpBV0FZUjRBREJBKQ0KDQpfRXhpdF8NCnN1bXEyDQohW3N1bXEyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvU3VtcTIucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0VTTVVDWVJVT0xCQllYWDdHWVI0QURCQSkNCnN1bXEzDQohW3N1bXEzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvU3VtcTMucG5nP3Rva2VuPUdIU0FUMEFBQUFBQUJRSFlaU0ZaTkFJUEpKWFFEMlZEN0tJWVI0QURCUSkNCg0KX1NpZ24gaW5fDQpzdW1xNA0KIVtzdW1xNF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1N1bXE0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGUkFMU1lLNk5XQUJETkE1WVlSNEFEQ0EpDQpzdW1xNQ0KIVtzdW1xNV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NNQy1RQ0wvZmVsbG93LWhhbmRib29rL21haW4vSW1hZ2VzL1N1bXE1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGSVpPS05JR0pDNlE1QlUzQVlSNEFEQ1EpDQoNCiMjIyMgZC4gUm91Z2ggRHJhZnQgSW1wYWN0IFJlcG9ydCAgPGEgbmFtZT0iUm91Z2ggRHJhZnQgSW1wYWN0IFJlcG9ydCI+PC9hPg0KDQpSb3VnaDENCiFbUm91Z2gxXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUm91Z2gxLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFQzRDVU9ZUkFQVjdKTkNXQVlSNEFFR0EpDQpSb3VnaDINCiFbUm91Z2gyXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUm91Z2gyLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGVTJDNkhQS0dNWFNUWVlXTVlSNEFFR1EpDQpSb3VnaDMNCiFbUm91Z2gzXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUm91Z2gzLnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGVU9ZSERUUEI2T05BWVBRTVlSNEFFSEEpDQpSb3VnaDQNCiFbUm91Z2g0XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUm91Z2g0LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNFUkpNS0ZRVVNNU1kyQjNWV1lSNEFFSUEpDQpSb3VnaDUNCiFbUm91Z2g1XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ01DLVFDTC9mZWxsb3ctaGFuZGJvb2svbWFpbi9JbWFnZXMvUm91Z2g1LnBuZz90b2tlbj1HSFNBVDBBQUFBQUFCUUhZWlNGWjU3U0pSVUJKWE9WUVVJSVlSNEFFSUEp